在controllers / front中,我创建了一个名为abandonedCarts的控制器:
class <moduleName>AbandonedCartsModuleFrontController extends ModuleFrontController
{
public function __construct()
{
parent::__construct();
$this->context = Context::getContext();
$this->store_debug('Controller - __construct');
}
public function initContent()
{
parent::initContent();
$this->store_debug('Controller - init');
}
}
其中store_debug是一个只需登录db的函数(仅用于检查)。 多亏了这一点,我知道当我以这种方式从URL调用控制器时
site/index.php?fc=module&module=olyo&controller=abandonedCarts
正在调用construct和init方法,但我需要的是在安装模块时(或在第一次启动时)调用控制器。
在主文件中我还在构造函数中输入了这一行:
$this->controllers = array('abandonedCarts');
但我不确定我是否需要它
答案 0 :(得分:1)
您可以包含Controller,只需调用以下对象方法:
<?php
class MyModule extends Module {
public install(){
$file = _PS_MODULE_DIR_.'/'.$this->name.'/controllers/front/default.php';
require_once $file;
$obj = new ObjectController();
$obj->my_super_method();
return true;
}
}
您不需要控制器参数。默认情况下,你应该坚持使用Prestashop的生成器:https://validator.prestashop.com/
答案 1 :(得分:0)
你不应该在admin上下文中实例化FrontController,这是一个解决方法:
您的模块:
<?php
class MyModule extends Module {
public install(){
$result = parent::install();
if ($result) {
$this->doStuff();
}
return $result;
}
public function doStuff() {
// do stuff
}
}
你的控制器
<?php
class <moduleName>AbandonedCartsModuleFrontController extends ModuleFrontController
{
public function initContent()
{
parent::initContent();
$this->module->doStuff();
}
}