You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 类型,或通过 hookActionOrderGridRowModifier Hook 修改行数据
  • 权限控制:可在添加列时判断当前用户权限,决定是否显示该列

内容的提问来源于stack exchange,提问作者Baptiste L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:31