首页 文章

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

提问于
浏览
1

我的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

    虽然链接问题的答案工作得很好,但仅使用模块就可以实现同样的目标(不需要覆盖) .

    管理控制器具有用于列表字段修改的挂钩 . 有两个具有相同名称,但它们的 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最佳实践,并且只有在没有办法用钩子做的时候才能解决问题,然后用覆盖来做 .

  • 2

    你删除了/cache/class_index.php吗?如果您希望覆盖生效,则必须执行此操作 . 如果它仍然不起作用,也许您可以使用AdminOrderControllers方法中调用的钩子处理新模块 .

相关问题