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

Prestashop 1.6创建显示载波滤波器的模块,prestashop,prestashop-1.6,Prestashop,Prestashop 1.6,我的基于Prestashop的站点目前有一个对AdminOrdersController.php的覆盖,我已将其放置在覆盖文件夹中 从下面提供的链接中,添加一个载波滤波器是非常好的,它现在在Prestashop 1.6中不可用。我已经尝试过这个解决方案,而且效果很好 参考: 不幸的是,对于生产站点,我无法访问核心文件,也无法实现这样的功能。因此,我需要创建一个自定义模块。请注意,我已经为AdminOrdersController.php设置了覆盖。我想点击此覆盖并插入过滤器 我已经设法创建了一个

我的基于Prestashop的站点目前有一个对AdminOrdersController.php的覆盖,我已将其放置在覆盖文件夹中

从下面提供的链接中,添加一个载波滤波器是非常好的,它现在在Prestashop 1.6中不可用。我已经尝试过这个解决方案,而且效果很好

参考:

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

我已经设法创建了一个模块,并尝试在mymodule/override/controller/admin/AdminOrdersController.php中使用carrier筛选器功能放置一个覆盖(使用URL中提供的代码)

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

非常感谢您的指导


谢谢。

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

虽然链接问题的答案很好,但同样的事情也可以通过单独的模块实现(不需要覆盖)

管理员控制器有一个钩子用于修改列表字段。有两个名称相同,但它们的
params
数组中的数据不同

在将筛选器应用于列表之前执行

在从数据库中提取数据并呈现列表之前执行

因此,您可以向现有控制器列表定义中添加字段,如模块文件中所示:

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
数组中的,所以您可以在钩子中修改它们,并将更改保留回控制器。这将在列表的末尾追加carrier列


prestashop的最佳实践是尝试通过模块挂钩解决问题,只有在确实没有办法用挂钩解决问题时,才使用覆盖解决问题。

注意到。谢谢你的建议。我已经根据你建议的钩子编辑了页面。您的代码返回错误,但无法执行。$params['select'].=',cr.name as carrier'$参数['join'].='LEFT join
'.\u DB_PREFIX_.'carrier
cr ON(cr.
id_carrier
=a.
id_carrier
)$参数['fields']['carrier']=数组('title'=>this->l('carrier'),'align'=>text center');这返回了一个错误:“where子句”中的未知列“carrier”显示了带有carrier筛选器的订单显示,但在我键入搜索框时抛出了一个错误。之后失败。@MuhammadFakhrinBinUmar我已更新了答案中的代码。过滤现在应该可以了。太好了。它正在按预期工作。谢谢你的帮助!:)注意,如果钩子不能为我工作,我将尝试这种方法。最好不要覆盖,但我已经尝试覆盖一天了(