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

PrestaShop1.7.7.5后台订单列表新增承运商列字段添加失败问题咨询

核心问题原因

PrestaShop 1.7.7+版本后台订单列表已改用Symfony Grid组件架构,你使用的hookActionAdminOrdersListingFieldsModifier是旧版控制器列表的钩子,已经失效,且旧架构里订单表别名a在新Grid里已改为o,这是你修改不生效的核心原因。

解决步骤

1. 移除无效代码

删除你之前编写的hookActionAdminOrdersListingFieldsModifier钩子全部代码,该钩子在1.7.7+订单列表中不会被触发。

2. 新增查询修改钩子

添加hookActionOrderGridQueryBuilderModifier钩子修改订单列表查询语句,关联承运商表获取对应名称,注意先引入必要的命名空间:

use Doctrine\DBAL\Query\QueryBuilder;

public function hookActionOrderGridQueryBuilderModifier(array $params)
{
    /** @var QueryBuilder $queryBuilder */
    $queryBuilder = $params['query_builder'];
    
    // 关联承运商表,适配多语言场景
    $queryBuilder->addSelect('cl.name as carriername');
    $queryBuilder->leftJoin(
        'o',
        _DB_PREFIX_ . 'order_carrier',
        'oc',
        'o.id_order = oc.id_order'
    );
    $queryBuilder->leftJoin(
        'oc',
        _DB_PREFIX_ . 'carrier_lang',
        'cl',
        'oc.id_carrier = cl.id_carrier AND cl.id_lang = :id_lang'
    );
    // 绑定当前后台语言ID参数
    $queryBuilder->setParameter('id_lang', $this->context->language->id);
    
    // 处理单订单多承运商场景,避免出现重复订单行
    $queryBuilder->groupBy('o.id_order');
}

3. 调整列定义钩子

完善hookActionOrderGridDefinitionModifier配置,支持排序、筛选功能,引入必要命名空间:

use PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn;
use PrestaShop\PrestaShop\Core\Grid\Filter\Type\TextFilter;

public function hookActionOrderGridDefinitionModifier(array $params)
{
    $definition = $params['definition'];
    $columns = $definition->getColumns();
    $filters = $definition->getFilters();
    
    // 新增承运商列
    $columns->addAfter(
        'country_name',
        (new DataColumn('carriername'))
            ->setName($this->trans('Carrier', [], 'Admin.Global'))
            ->setOptions([
                'field' => 'carriername',
                'sortable' => true,
            ])
    );
    
    // 新增承运商筛选器
    $filters->add(
        (new TextFilter('carriername'))
            ->setName($this->trans('Carrier', [], 'Admin.Global'))
            ->setAssociatedColumn('carriername')
    );
    
    // 配置承运商字段排序规则
    $definition->getSorting()->addOrder('carriername', 'asc');
}

4. 检查钩子注册与缓存清理

  • 确保你使用的模块install方法中已经注册两个新钩子,代码示例:
public function install()
{
    return parent::install() && 
        $this->registerHook('ActionOrderGridDefinitionModifier') &&
        $this->registerHook('ActionOrderGridQueryBuilderModifier');
}
  • 修改完install方法后,在后台模块管理找到对应模块点击「重置」,确保钩子注册成功
  • 后台进入「高级参数」→「性能」页点击右上角「清除缓存」,再手动删除/var/cache/目录下的prod和dev文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:06:04