Контроллеры в PrestaShop

Опубликовано Опубликовано в рубрике prestashop, Руководство разработчика PrestaShop, Русская документация PrestaShop 1.6

Контроллеры в PrestaShop

В архитектуре MVC контроллер управляет событиями синхронизации между представлением и моделью и сохраняет их в актуальном состоянии.

Он получает все пользовательские события и запускает действия для выполнения.

Если действие требует изменения данных, контроллер «попросит» Модель изменить данные, и в свою очередь Модель уведомит вид о том, что данные были изменены, чтобы вид мог обновить себя.

Все контроллеры PrestaShop фактически переопределяют класс Controller через другой наследующий класс:

  • AdminController,
  • ModuleAdminController,
  • FrontController,
  • ModuleFrontController,

Их можно найти в папке / classes / controller.

FrontController класс

Вот некоторые из свойств класса:

Свойство
Описание
$template Template name for page content.
$css_files Array list of CSS files.
$js_files Array list of JavaScript files.
$errors Array of errors that have occurred.
$guestAllowed Whether a customer who has signed out can access the page.
$initialized Whether the init() function has been called.
$iso The ISO code of the currently selected language.
$n The number of items per page.
$orderBy The field used to sort.
$orderWay Whether to sort is ascending or descending («ASC» or «DESC»).
$p The current page number.
$ajax If the ajax parameter is detected in request, set this flag to true.

Порядок выполнения функций контроллера

  1. __contruct(): Устанавливает все переменные-членов контроллера.
  2. init(): инициализирует контроллер.
  3. setMedia() или setMobileMedia(): Добавляет все элементы JavaScript и CSS на страницу, чтобы их можно было комбинировать, сжимать и кэшировать (см. Инструмент CSS PrestaShop на странице «Производительность» бэк-офиса в меню «Расширенные настройки»).
  4. postProcess(): управляет ajaxProcess.
  5. initHeader(): вызывается до initContent().
  6. initContent(): Инициализирует контент.
  7. initFooter(): Вызывается после initContent().
  8. display() или displayAjax(): Отображает контент

Существующие контроллеры фронт-офиса

Здесь находятся контроллеры по умолчанию и файлы тем, которые их используют.

Controller’s filename
Description
AddressController.php Used by address.php to edit a customer’s address.
AddressesController.php Used by addresses.php to get customer’s addresses.
AttachmentController.php
AuthController.php Used by authentication.php for customer login.
BestSalesController.php Used by best-sales.php to get best-sellers.
CartController.php Used by cart.php to manage the customer’s cart.
CategoryController Used by category.php to get product categories.
ChangeCurrencyController.php
CmsController.php Used by cms.php to get a CMS page.
CompareController.php Used by products-comparison.php to compare products.
ContactController.php Used by contact-form.php to send messages.
DiscountController.php Used by discount.php to get a customer’s vouchers.
GetFileController.php
GuestTrackingController.php Used by guest-tracking.php to manage guest orders.
HistoryController.php Used by history.php to get a customer’s orders.
IdentityController.php Used by identity.php for customer’s personal info.
IndexController.php Used by index.php to display the homepage.
ManufacturerController.php Used by manufacturer.php to get manufacturers.
MyAccountController.php Used by my-account.php to manage customer account.
NewProductsController.php Used by new-products.php to get new products.
OrderConfirmationController.php Used by order-confirmation.php for order confirmation.
OrderController.php Used by order.php to manage the five-step checkout.
OrderDetailController.php Used by order-detail.php to get a customer order.
OrderFollowController.php Used by order-follow.php to get a customer’s returns.
OrderOpcController.php Used by order-opc.php to manage one-page checkout.
OrderReturnController.php Used by order-return.php to get a merchandise return.
OrderSlipController.php Used by order-slip.php to get a customer’s credit slips.
PageNotFoundController.php Used by 404.php to manage the «Page not found» page.
ParentOrderController.php Manages shared order code.
PasswordController.php Used by password.php to reset a lost password.
PdfInvoiceController.php
PdfOrderReturnController.php
PdfOrderSlipController.php
PricesDropController.php Used by prices-drop.php to get discounted products.
ProductController.php Used by product.php to get a product.
SearchController.php Used by search.php to get search results.
SitemapController.php Used by sitemap.php to get the sitemap.
StatisticsController.php
StoresController.php Used by stores.php to get store information.
SupplierController.php Used by supplier.php to get suppliers.

Переопределение контроллера

Благодаря наследованию объектов вы можете изменить поведение контроллера или добавить новые.

Переопределяйте только для своего магазина

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

Тем не менее, переопределения должны использоваться только для ваших собственных локальных модулей, когда у вас есть определенная потребность и по другому нельзя
Не рекомендуется использовать переопределение в модуле, который вы собираетесь распространять (например, через торговую площадку PrestaShop Addons), и они запрещены в партнерских модулях.

Контроллеры PrestaShop хранятся в /controllers папке, и используют «Core» суффикс.

Например, при работе с контроллером категории:

  • File: /controllers/CategoryController.php
  • Class: CategoryControllerCore

Чтобы переопределить контроллер, вы должны сначала создать новый класс без суффикса «Core» и поместить его файл в /override/controllers папку.

Например, при переопределении контроллера категории:

  • File: /override/controllers/front/CategoryController.php
  • Class: CategoryController