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

如何在cart-detailed-product-line.tpl中调用ps_cart表自定义字段数据?

在PrestaShop的cart-detailed-product-line.tpl中显示ps_cart自定义字段的方法

要在该模板中展示ps_cart表的自定义字段,你需要通过以下步骤确保数据能传递到模板:

1. 确认自定义字段已添加到ps_cart表

先确保你已经通过phpMyAdmin或PrestaShop数据库管理工具,将自定义字段成功添加到ps_cart表中(注意替换前缀ps_为你实际的数据库表前缀)。

2. 方法一:通过重写Cart类让$cart实例包含自定义字段

PrestaShop的Cart模型类默认映射ps_cart表字段,新增字段需要更新模型定义:

  • 在你的PrestaShop根目录下创建override/classes/Cart.php文件(若已存在则编辑),添加以下代码:
    class Cart extends CartCore
    {
        // 声明你的自定义字段
        public $your_custom_field;
    
        public static $definition = array(
            'table' => 'cart',
            'primary' => 'id_cart',
            'fields' => array(
                // 保留原有字段,追加你的自定义字段配置
                'your_custom_field' => array('type' => self::TYPE_STRING, 'size' => 255, 'nullable' => true),
                // 若字段是其他类型,比如整数,可改为self::TYPE_INT
            ),
        );
    }
    
  • 登录PrestaShop后台,进入高级参数 > 性能,点击"清除缓存"(或直接删除服务器上var/cache目录下的文件),使重写生效。
  • 此时模板中的$cart变量就会包含该字段,直接在cart-detailed-product-line.tpl中使用{$cart.your_custom_field}即可显示。

3. 方法二:在Cart控制器中直接查询并传递变量

如果你不想修改Cart类,可通过重写Cart控制器来获取字段值并传到模板:

  • 创建override/controllers/front/CartController.php文件(若已存在则编辑):
    class CartController extends CartControllerCore
    {
        public function initContent()
        {
            // 先执行父类的初始化逻辑
            parent::initContent();
    
            // 获取当前购物车ID
            $id_cart = $this->context->cart->id;
            // 查询自定义字段值
            $custom_field_value = Db::getInstance()->getValue(
                'SELECT your_custom_field FROM ' . _DB_PREFIX_ . 'cart WHERE id_cart = ' . (int)$id_cart
            );
    
            // 将变量传递给模板
            $this->context->smarty->assign('cart_custom_field', $custom_field_value);
        }
    }
    
  • 清除缓存后,在cart-detailed-product-line.tpl中使用{$cart_custom_field}即可显示字段内容。

4. 方法三:通过模块钩子实现(无核心文件修改)

若你希望避免修改核心或重写文件,可通过自定义模块的钩子来传递变量:

  • 在你的模块文件中添加以下钩子方法:
    public function hookActionCartControllerInitContent($params)
    {
        $id_cart = $params['controller']->context->cart->id;
        $custom_field_value = Db::getInstance()->getValue(
            'SELECT your_custom_field FROM ' . _DB_PREFIX_ . 'cart WHERE id_cart = ' . (int)$id_cart
        );
        // 传递变量到模板
        $params['controller']->context->smarty->assign('cart_custom_field', $custom_field_value);
    }
    
  • 安装并启用该模块后,清除缓存,即可在模板中使用{$cart_custom_field}。

注意:所有方法操作后都必须清除PrestaShop缓存,否则修改不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:55:27