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

Prestashop 1.7:如何从产品表获取ISBN至配送单模板

解决Prestashop亚马逊导入订单配送单中ISBN(包装尺寸)为空的问题

问题根源

通过Common-Services模块导入的亚马逊订单,订单详情表(order_detail)里的ISBN字段为空,但原生创建的订单能正常存储该值。直接在模板里调用{$product.isbn}触发500错误,是因为模板上下文里没有初始化好的$product对象。

解决方案:修改HTMLTemplateDeliverySlip.php从产品表直接拉取ISBN

  1. 找到目标文件:/classes/pdf/HTMLTemplateDeliverySlip.php
  2. 定位到getTemplateVars()方法,找到遍历订单详情的循环(处理$order_details的代码块)
  3. 在循环内部,通过订单详情的product_id实例化产品对象,获取ISBN并追加到订单详情数组中:
foreach ($this->order->getDetails() as $order_detail) {
    // 保留原有逻辑(比如价格、数量计算等代码)
    
    // 新增:通过产品ID从产品表获取ISBN
    if (!empty($order_detail['product_id'])) {
        $product = new Product((int)$order_detail['product_id'], false, $this->context->language->id);
        // 将ISBN存入order_detail数组,传递给模板
        $order_detail['product_isbn'] = $product->isbn;
    }
    
    // 保留原有逻辑(比如将order_detail加入模板变量数组)
}

模板调用调整

修改delivery-slip.product-tap.tpl,直接使用{$order_detail.product_isbn}即可——这个变量现在会优先从产品表拉取ISBN(包装尺寸),不管是原生订单还是导入订单都能正常显示,无需依赖订单详情表的存储值。

额外提示

  • 加!empty判断是为了避免无效产品ID导致的实例化错误
  • 如果ISBN是全局字段(不随语言变化),可以省略$this->context->language->id参数,直接写new Product((int)$order_detail['product_id'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:22:37