• Инструменты для разработчика

    • Самые удобные инстременты для разработчика, которые облегчат жизнь любого как начинающего так и продвинутого разработчика. Украшатели, уменьшители, конвертеры кодов. Доменные инструменты. Всё в одном комплекте.
  • Использование BB кодов. Тут указаны существующие BB коды на форуме.

[PHP] СОЗДАНИЕ ДВИЖКА НА CODEIGNITER 3 + HMVC. ЧАСТЬ 4. СОЗДАНИЕ МОДУЛЯ CATEGORY

impuLse #IT

Администратор
Команда форума
Регистрация
12.03.2015
Сообщения
914
Репутация
448
Баллы
74
Награды
2
Адрес
mySQL
Лучшие ответы
0
  • Супер постер
  • Постер
Сегодня мы будем писать еще один важный модуль, без которого не обойдется ни один движок. Да, это модуль категории - он очень похож на
Пожалуйста, Войти или Регистрация для просмотра содержимого URL-адресов!
, который мы программировали в предыдущий раз.

Наши действия и результат получим следующий:

  • Сформированную и продуманную таблицу в бд для категорий сайта
  • Рендинг категорий в отдельном шаблоне
  • Вывод вложенных категорий
  • Вывод вложенных страниц категории
  • Создание пагинации на bootstrap, для объемных разделов
  • Проверку на существование страницы
  • Формирование мета данных, для сео продвижения и передачу данных общему шаблону
  • Вывод раздела по адресу
    Пожалуйста, Войти или Регистрация для просмотра содержимого URL-адресов!
  • Настройка роутинга codeigniter для обработки модуля
МОДУЛЬ CATEGORY. СОЗДАНИЕ БАЗЫ ДАННЫХ ДЛЯ ВСЕХ РАЗДЕЛОВ
Создадим таблицу category и создаем раздел "статьи" и 3 вложенных категории.
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!
СОЗДАНИЕ СТРУКТУРЫ МОДУЛЯ КАТЕГОРИИ ДЛЯ ДВИЖКА НА CI3
Отлично! У нас есть таблица для категорий - она не сильно отличается от таблицы pages. Разница как вы уже заметили в дополнительном поле parent_id - так мы сможем задавать родителя для категории и создавать сколько угодно уровней вложенности.

Создадим папку category в modules + вложенные папки controllers, models, config.

Исходный код контроллера будет немного сложнее его предшественника модуля страниц. Давайте займемся подготовкой и для начала расширим нашу главную библиотеку main_lib.php новыми функциями: pagination, short_content, substrword. Допишем в конец файла /modules/common/libraries/main_lib.php следующий код
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!
pagination - конфигурация для отображения и вывода пагинации в разделах. Стили заданные в функции готовы для вывода красиво оформленного блока с ссылками на уровень категории. В первой переменной per_page - можно задать с каким количеством страниц(pages) модулю следует работать.

short_content - вот это действительно интересная функция. Я немного расширил ее код, забегая на перед для работы с будущими модулями, но вкратце объясню логику работы:
С параметром $text - мы передаем функции содержание ячейки content таблицы pages. В базе храниться полное содержание страницы и нам нужно удалить все html теги, затем укоротить текст и вывести это все в категорию.

Зачем же тогда там еще два дополнительных параметра $position и $more_tag? В первом параметре мы указываем сколько символов следует оставить для вывода краткого содержания страницы. Если этот параметр не задан - то обрезаем текст до 400 символов, иначе указываем нужное нам число. А функция substword - обрабатывает текст и добавляет троеточие в конце текста для красивого оформления.

Третий параметр позволяет выводить весь текст до заданного нами тега. Работая с движками joomla и Wordpress вы наверняка обращали внимание на кнопку "Подробнее..." или "Разрыв статьи", в разных версиях по разному. Так вот текстовые редакторы типа TinyMCE по нажатию на эту кнопку вставляют закомментированный тег, в нашем случае - это . Скрипт находит в тексте данный кусок и обрезает все символы после указателя, далее текст так же обрабатывается и выводится в разделе. Скриншот для подробного разъяснения:

Идем дальше и подготовим модель с запросами к бд для модуля категорий.
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!
Стандартная работа active records. Получаем данные отдельной категории или выбираем все дочерние категории указывая parent_id в запросе. Для постраничной навигации нам следует задать указатель начала выборки и количество элементов для вывода. Если мы находимся на 3й странице то необходимо показать элементы с 11 по 15. Эти параметры мы и будем передавать из нашего контроллера category.php Подсчет страниц раздела - так же необходим для постраничной навигации, что бы рассчитать количество страниц для вывода.
СОЗДАНИЕ ПАГИНАЦИИ НА CODEIGNITER 3 + BOOTSTRAP. ИСХОДНЫЙ КОД КОНТРОЛЛЕРА CATEGORY.PHP
Что бы наш движок полноценно функционировал и мы могли выводить адрес сайта и работать с url'ами - подключим в автозагрузку помощник url. Открываем файл /application/config/autoloader.php и добавляем в массив автозагрузки helper - помощник "url"

$autoload['helper'] = array('url');

Ну вот мы и приблизились к моменту истины данного урока. Следующий код я постарался хорошо закомментировать, что бы вам было легче разобраться. В место двух привычных методов класса category мы будем использовать три. Почему? ДА все из за постраничной навигации;) Код немного сложный, я постарался оптимизироваться запросы к бд до минимума, полный вывод категории использует всего 8 запросов - все запросы и время генерации страницы и затрачиваемое время на работу с бд можно посмотреть включив profiler в конструкторе библиотеки main_lib.
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!
Перечислять все наши действия - повторяться с комментариями, но вкратце пройдемся:
  • Проверяем наличие страницы в бд и если такой раздел существует получаем все данные по url
    методом get_category - генерируем содержание $content для вывода в главном шаблоне
  • Get_category_pages_links - не только подготавливает и запускает библиотеку pagination встроенную в codeigniter - но так же делает выборку всех страниц категории. Так же мы проходимся циклом по нашему массиву с выбранными данными и генерируем краткое содержание каждой отдельной страницы.
  • Инициализируем постраничную навигацию и возвращаем данные
  • Элемент links массива $category - содержит в себе сгенерированное отображение постраничной навигации.
  • Элемент categories - содержит в себе список с данными всех дочерних категорий
  • Элемент pages - данные всех страниц отображаемого раздела
  • Генерируем все данные в шаблоне category_full.tpl
  • Отдаем данные на рендинг главного шаблона
Продолжаем работать с созданным ранее на фреймворке bootstrap сайтом и создадим шаблон category_full.tpl

Здесь мы выводим заголовок раздела. Далее проверяем существуют ли у данного раздела дочерние категории, если да, то циклом с красивым оформлением - выводим.

Далее - уведомляем пользователя о том что в категории нет страниц, либо выводим циклом все страницы раздела, задавая ссылки на саму страницу, изображение или заглушку, краткое содержание и заголовок.

В самом конце - изображение раздела и его описание.
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!
Теперь наполним немного наш сайт пустыми тестовыми страницами, указав родительскую категорию - наш главный раздел "Статьи".
PHP:
Пожалуйста, Войти или Регистрация для просмотра содержания кодов!

Последний скриншот - это результат нашей с вами работы во всей ее красе) Как мы видим все дочерние разделы выводятся, все статьи раздела отображаются, пагинация работает а сайт уже похож на полноценный блог. У кого возникли проблемы - может скачать исходный код полностью рабочего
Пожалуйста, Войти или Регистрация для просмотра содержимого URL-адресов!


Статья взято из сайта polyakov.co.ua
 
Сверху Снизу