Переопределить контроллер модуля Prestashop: где разместить php-файл?
Я пытаюсь переопределить модуль в Prestashop. Я успешно переопределил шаблоны модулей, но я не могу успешно перезаписать контроллер модулей.
Где должен быть размещен новый файл класса контроллера?
Я пробовал следующие места, но они не добавляют новое поведение (ничего не меняют):
~ / переопределяет / modules / blockwishlist / controllers / front/mywishlist.РНР
~/темы/MY_THEME/модули/blockwishlist/контроллеры/передний/mywishlist.РНР
Согласно моему предыдущему вопросу, я мог бы сделать это, отредактировав основные классы (любезно предложенный u / Sergii P), но я уверен, что есть стандартный способ сделать это, который не включает редактирование основных классов?
Для справки; вот содержание mywishlist.php
:
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
//class BlockWishListMyWishListModuleFrontController extends BlockWishListMyWishListModuleFrontControllerCore // extends ModuleFrontController
class BlockWishListMyWishListModuleFrontControllerOverride extends BlockWishListMyWishListModuleFrontController
{
public function __construct()
{
parent::__construct();
}
/**
* Assign wishlist template
*/
public function assign()
{
$errors = array();
....
$this->setTemplate('mywishlist.tpl');
}
}
Редактировать: у меня есть возможное решение, не будучи в состоянии переопределить ModuleFrontController
класс. Цель состоит в том, чтобы добавить кнопку "Экспорт в CSV" на страницу Мои списки пожеланий, когда кнопка нажата, сервер создаст файл CSV, содержащий все продукты в этом списке пожеланий. Прежде чем я сделаю всю работу, вы можете дать совет о том, возможно ли это...
- Поместите Хук в файл шаблона, который вызовет пользовательский Хук и будет связан с пользовательским модулем
{hook h='displayExportToCsvColumn' mod='myCustomModule'}
- Создайте пользовательский модуль, который регистрирует новый крюк, имеет метод, который отображает столбец таблицы и кнопку и имеет метод, который генерирует файл CSV.
- Большой вопрос: Можете ли вы иметь модуль внутри модуля? Файл шаблона, который я редактирую, находится внутри модуля
BlockWishlist
(~/themes/MY_THEME/modules/blockwishlist/controllers/front / mywishlist.php) и тогда мой крюк вызовет мой пользовательский модуль. Возможно ли это?


Ответы - Переопределить контроллер модуля Prestashop: где разместить php-файл? / Override Prestashop Module Controller: Where to place php file?

17.11.2015 11:30:40
Насколько я мог понять, вы не можете переопределить ModuleFrontController
на данный момент (извините, что говорю). Ключи находятся в Dispatcher::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);
break;
Он проверяет только /modules/?/controllers/
каталог. Вы не можете переопределить ModuleFrontController
класс Dispatcher и заставить его сканировать переопределения ModuleFrontController
.
Обычно есть способ изменить то, что вы хотите с помощью крючков, в худшем случае - ввести javascript через крючок и изменить содержимое.


error_log($hook_name)
в HookCore::exec
, выберите крючок, сделайте if
для целевой конкретной страницы. Чтобы получить CSV, вам, вероятно, придется вызвать свой собственный PHP-скрипт

08.01.2019 02:27:10