PrestaShop: Страницы категорий/каталога (Controller, Modules, Hooks) в Prestashop(Перевод)

test

Presta Контроллер категорий и товаров

Приветствую, Читатель!

Интро

Ну вот очередной перевод "для себя" и заодно для вас, читатели. Так как тема PrestaShop для меня на текущий момент весьма актуальна, а материала по нему в ру-язычном сегменте достаточно мало, а платить за модули готовые для разработчика дело... не правильное. Тем более там по большей части украшалки и ничего толкового. Мое имхо как итого: можно сделать хороший высоконагруженный магазин, но только если взять за основу саму архитектуру CMS и полностью перепилять ее модули и контроллеры. Как итого я уже сделал для себя модуль меню(блок категорий) который при 300+ категориях делает всего 2 запроса, вместо 300 как у того что присутствует в поставке самой CMS. Так же я доделываю фильтры и контроллер категорий. Все это в одном модуле. Все в купе вместо 1200+ запросов к базе кушает около 40+ запросов. Приятно? Очень.

Я отвлекся. В общем и целом дальше перевод статьи Category/Catalog page (Controller, Modules, Hooks) in Prestashop, которая даст нам еще больше понять и прояснить в архитектуре и работе PrestaShop.

Дальше сам перевод.


Контроллер CategoryController

/controllers/front/CategoryController.php

CаtegоryCоntrоller контроллер ответственный за генерацию страниц каталога. Наследуется от класса FrontController. Давайте рассмотрим методы вызываемые этим контроллером. Но сперва давайте упорядочим в том порядке, в котором они вызываются.

Методы класса CаtegоryCоntrоller:

setMedia – устанавливает медиа(CSS,JS) для этого контроллера.
canonicalRedirection - автоматический редирект на канонический URL, если нужно(вызывается в FrontController::init())
init – инициализация контроллера категорий
initContent (смотри Controller Class RequestFlow) – шаблон, ответственный за отображение страницы категорий(category.tpl), определяется в этой функции.
assignScenes – ассоциировать переменные передаваемые в шаблоны
assignSubcategories – Подключаем подкатегории в переменные шаблонов
assignProductList – Подключаем список товаров в переменные шаблона. Этот метод имеет единственный “асtiоnPrоduсtListOverride”

Hook::exec('actionProductListOverride', array(
    'nbProducts' => &$this->nbProducts,
    'catProducts' => &$this->cat_products,
    'hookExecuted' => &$hookExecuted,
));

Шаблоны

Шаблон category.tpl один из самых сложных, так как он подключает к себе большое количество других шаблонов:

breadcrumb.tpl – добавляет хлебные крошки на страницу
errors.tpl – если есть какие-либо сообщения об ошибках то этот шаблон будет отображен блоком.
category-count.tpl – шаблон ответственный за отображение строки с количеством товаров, например «There are %d products»
scenes.tpl – отображает картинку с отмеченными товарами(displays the image with the marked out goods)
pagination.tpl – навигация на другие страницы
product-sort.tpl – ответственные за вывод полей для сортировки
product-compare.tpl – показывает кнопку для сравнения товаров
nbr-product-page.tpl – форма с выбором количества отображаемых на страницу товаров
product-list.tpl – главный шаблон, содержащий вывод товаров
product-sort.tpl –вызывается повторно на страницу(см. выше)
product-compare.tpl – вызывается повторно на страницу(см. выше)
nbr-product-page.tpl – вызывается повторно на страницу(см. выше)
pagination.tpl – вызывается повторно на страницу(см. выше)

Стандартные модули

Страница категорий вызывает несколько модулей зарегистрированных хуками в левой и правой колонках. Рассмотрим ближе эти модули в отдельной главе. Сейчас мы рассмотрим только один из них, модуль использующий хук “асtiоnPrоduсtListOverride” – «Layered navigation block»(Блок слоя навигации).

Layered navigation block

settings block

По умолчанию этот модуль отключен. Это достаточно важный блок, так как он позволяет пользователю искать продукты гораздо быстрее и проще. Но этот модуль не очень удобный для дизайнеров и программистов, так как не отделяет логику и шаблон. Эту проблему должны решить в новых версиях.

как выглядит блок

Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!