PrestaShop 1.7.8.10:如何通过模块在后台订单列表添加列?
PrestaShop 1.7.8.10 后台订单列表添加自定义列解决方案
问题说明
你当前提供的代码是用于给后台订单菜单添加子标签页,和「在订单列表中新增一列」的需求不符,需要替换为基于PrestaShop核心Hook的实现方式。
核心实现思路
要给订单列表添加自定义列,需借助两个关键Hook:
actionOrderGridDefinitionModifier:修改订单列表的列定义,注册新列actionOrderGridQueryBuilderModifier:调整查询逻辑,获取需要显示的数据
完整模块代码示例
假设模块名为customordercolumn,以下是关键文件代码:
1. 模块主文件 customordercolumn.php
<?php if (!defined('_PS_VERSION_')) { exit; } class CustomOrderColumn extends Module { public function __construct() { $this->name = 'customordercolumn'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Your Name'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Custom Order Column'); $this->description = $this->l('Adds a custom column to the back office order list'); $this->ps_versions_compliancy = [ 'min' => '1.7.8.0', 'max' => _PS_VERSION_ ]; } public function install() { return parent::install() && $this->registerHook('actionOrderGridDefinitionModifier') && $this->registerHook('actionOrderGridQueryBuilderModifier'); } // 新增订单列表列定义 public function hookActionOrderGridDefinitionModifier($params) { /** @var \PrestaShop\PrestaShop\Core\Grid\Definition\GridDefinitionInterface $definition */ $definition = $params['definition']; // 添加自定义列,这里以显示订单ID为例,可按需修改 $definition->getColumns()->add( (new \PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn('custom_column')) ->setName($this->l('Custom Column')) ->setOptions([ 'field' => 'custom_data', // 对应查询返回的字段名 ]) ); } // 调整查询逻辑,获取列所需数据 public function hookActionOrderGridQueryBuilderModifier($params) { /** @var \Doctrine\DBAL\Query\QueryBuilder $queryBuilder */ $queryBuilder = $params['query_builder']; // 示例1:直接取订单表的ID作为列内容 $queryBuilder->addSelect('o.id_order AS custom_data'); // 示例2:如果需要关联其他表(比如取客户邮箱),取消以下注释 // $queryBuilder->leftJoin('o', 'customer', 'c', 'o.id_customer = c.id_customer'); // $queryBuilder->addSelect('c.email AS custom_data'); } }
2. 安装与验证步骤
- 将上述代码保存到
/modules/customordercolumn/customordercolumn.php - 登录后台,进入「模块管理器」搜索并安装该模块
- 进入「订单」列表页面,即可看到新增的「Custom Column」列
进阶自定义选项
- 多语言列名:将列名替换为
$this->trans('Custom Column', [], 'Modules.Customordercolumn.Admin'),并在模块语言文件中添加对应翻译 - 复杂内容显示:如果需要显示链接、按钮等,可使用
ActionColumn类型,或通过hookActionOrderGridRowModifierHook 修改行数据 - 权限控制:可在添加列时判断当前用户权限,决定是否显示该列
内容的提问来源于stack exchange,提问作者Baptiste L
相关产品推荐
相关产品推荐

