Prestashop 1.6创建模块以显示载波过滤器

时间:2017-10-11 09:53:04

标签: prestashop prestashop-1.6

我的Prestashop网站目前正在对AdminOrdersController.php进行覆盖,我已将其置于覆盖文件夹中。

从下面提供的链接中,添加Carst过滤器完全正常,现在Prestashop 1.6中没有。我已经尝试过这个解决方案并且运行正常。

参考:Adding carrier filter in Orders page.

不幸的是,对于生产站点,我无法访问核心文件,因此无法实现。因此,我需要创建一个自定义模块。请注意,我已经为AdminOrdersController.php设置了覆盖。我想点击这个覆盖并插入过滤器。

我设法创建了一个模块,并尝试在mymodule / override / controller / admin / AdminOrdersController.php中使用运营商过滤功能放置覆盖(使用URL中提供的代码)。

没有变化/影响,我感到困惑。我是否需要生成或复制任何.tpl文件?

非常感谢任何指导。

谢谢。

2 个答案:

答案 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方法中调用的钩子处理新模块。