我的Prestashop网站目前正在对AdminOrdersController.php进行覆盖,我已将其置于覆盖文件夹中。
从下面提供的链接中,添加Carst过滤器完全正常,现在Prestashop 1.6中没有。我已经尝试过这个解决方案并且运行正常。
参考:Adding carrier filter in Orders page.
不幸的是,对于生产站点,我无法访问核心文件,因此无法实现。因此,我需要创建一个自定义模块。请注意,我已经为AdminOrdersController.php设置了覆盖。我想点击这个覆盖并插入过滤器。
我设法创建了一个模块,并尝试在mymodule / override / controller / admin / AdminOrdersController.php中使用运营商过滤功能放置覆盖(使用URL中提供的代码)。
没有变化/影响,我感到困惑。我是否需要生成或复制任何.tpl文件?
非常感谢任何指导。
谢谢。
答案 0 :(得分:2)
虽然链接问题中的答案工作正常,但仅使用模块就可以实现同样的目标(不需要覆盖)。
管理控制器具有用于列表字段修改的挂钩。有两个具有相同名称但是它们的params
数组中有不同的数据。
actionControllernameListingFieldsModifier。
actionControllernameListingFieldsModifier在从数据库中提取数据并呈现列表之前执行。
因此,您可以在模块文件中将字段添加到现有控制器列表定义中:
public function hookActionAdminOrdersListingFieldsModifier($params) {
if (isset($params['select'])) {
$params['select'] .= ', cr.name';
$params['join'] .= ' LEFT JOIN `'._DB_PREFIX_.'carrier` cr ON (cr.`id_carrier` = a.`id_carrier`)';
}
$params['fields']['carrier'] = array(
'title' => $this->l('Carrier'),
'align' => 'text-center',
'filter_key' => 'cr!name'
);
}
因为数组数据通过引用传递到$params
数组,所以您可以在钩子中修改它们,并且更改会持久地返回到控制器。这将在列表末尾附加运营商列。
通过模块挂钩尝试解决问题是prestashop的最佳实践,只有在没有办法用钩子做的时候才能解决问题,然后用覆盖来做。
答案 1 :(得分:0)
你删除了/cache/class_index.php吗?如果您希望覆盖生效,则必须执行此操作。 如果它仍然不起作用,也许您可以使用AdminOrderControllers方法中调用的钩子处理新模块。