我在哪里可以找到prestashop控制器以及如何扩展它们?

时间:2015-08-28 08:36:54

标签: php prestashop

我是prestashop的新手,所以如果我问一个非常简单的问题,请耐心等待。 我正在创建模块,在我的任务中,我必须扩展由javascript中的ajaxcart.add()函数调用的购物车控制器。 我想知道,响应此ajax请求的控制器位于何处,以及如何在我的模块中扩展此控制器。 关于这个有什么好的文件吗? 感谢

2 个答案:

答案 0 :(得分:2)

我找到了一种在模块中扩展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


 isacalc模块中的mycart控制器示例

class areacalcmycartModuleFrontController extends CartController {

isacalc模块内mycart控制器的文件路径

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

url将是

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

答案 1 :(得分:0)

您可以覆盖defaut CartController.php,在覆盖模块文件夹中添加类代码(只有修改后的方法)在这种情况下我想你会修改processChangeProductInCart方法,你可以看到prestashop override documentation < / p>