где я могу найти контроллеры prestashop и как их расширить?

1

Я новичок в prestashop, поэтому, пожалуйста, несите меня, если я задаю очень простой вопрос. Я занимаюсь созданием модуля, и в своей задаче я должен расширить контроллер тележки, который вызывается функцией ajaxcart.add() в javascript. Я хочу знать, где находится контроллер, который отвечает на этот запрос ajax, и как я могу расширить этот контроллер в моем модуле. Есть ли хорошая документация по этому поводу? благодаря

  • 0
    Как предполагает А. Виссер, вам следует прочитать документы Prestashop. Там много информации о расширении существующего функционала. Вы также можете посмотреть другие модули, которые добавляют дополнительную функциональность к существующему коду.
  • 0
    Я добавил раствор, который нашел, заглянув внутрь капюшона prestashopo. Кто-нибудь может сказать мне аналогичный способ расширить /classes/product.php?@nathangiesbrecht
Теги:
prestashop

2 ответа

3
Лучший ответ

Я нашел способ расширения стандартных контроллеров prestashop внутри модуля. Я посмотрел вкратце classes/Dispatcher.php и нашел это в методе dispatch()

case self::FC_MODULE :
            $module_name = Validate::isModuleName(Tools::getValue('module')) ? Tools::getValue('module') : '';
            $module = Module::getInstanceByName($module_name);
            $controller_class = 'PageNotFoundController';
            if (Validate::isLoadedObject($module) && $module->active) {
                $controllers = Dispatcher::getControllers(_PS_MODULE_DIR_.$module_name.'/controllers/front/');
                if (isset($controllers[strtolower($this->controller)])) {
                    include_once(_PS_MODULE_DIR_.$module_name.'/controllers/front/'.$this->controller.'.php');
                    $controller_class = $module_name.$this->controller.'ModuleFrontController';
                }
            }
            $params_hook_action_dispatcher = array('controller_type' => self::FC_FRONT, 'controller_class' => $controller_class, 'is_module' => 1);

Итак, соглашение об именах для контроллера

<modulename><controllername>ModuleFrontController


и путь к контроллеру должен быть

module/<module name>/cotrollers/front/<controllername>.php


Пример контроллера mycart внутри модуля isacalc

class areacalcmycartModuleFrontController extends CartController {

Путь файла к контроллеру mycart внутри модуля isacalc

/modules/areacalc/controllers/front/mycart.php

url будет

http://localhost:8080/index.php?fc=module&module=areacalc&controller=mycart
0

Вы можете переопределить defaut CartController.php, в папке модуля переопределения вы добавляете свой код класса (только модифицированный метод), в этом случае я предполагаю, что вы измените метод processChangeProductInCart, вы можете увидеть документацию переопределения prestashop

Ещё вопросы

Сообщество Overcoder
Наверх
Меню