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

Prestashop 1.6 Create Module to Display Carrier Filter

我的基于 Prestashop 的站点当前有 AdminOrdersController.php 的覆盖,我已将它放在覆盖文件夹中。

从下面提供的 link 来看,添加 Prestashop 1.6 现在不可用的 Carrier 过滤器效果很好。我已经尝试过该解决方案并且它运行良好。

参考:

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

我已经成功地创建了一个模块并尝试在 mymodule/override/controller/admin/AdminOrdersController.php 中放置一个覆盖(使用 URL 中提供的代码)和载波过滤器功能。

一直没有changes/effect,百思不得其解。我是否需要生成或复制任何 .tpl 文件?

非常感谢任何指导。

谢谢。

您是否删除了 /cache/class_index.php?如果您希望覆盖生效,则必须这样做。 如果它仍然不起作用,也许您可​​以使用新模块的 AdminOrderControllers 方法中调用的挂钩进行处理。

虽然链接问题中的答案工作正常,但同样的事情可以单独使用模块实现(不需要覆盖)。

管理控制器有一个用于列表字段修改的挂钩。有两个名称相同,但它们的 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 的最佳实践,只有当确实无法使用挂钩解决问题时,才使用覆盖来解决。