如何在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
相关产品推荐
相关产品推荐

