Prestashop 1.7:如何从产品表获取ISBN至配送单模板
解决Prestashop亚马逊导入订单配送单中ISBN(包装尺寸)为空的问题
问题根源
通过Common-Services模块导入的亚马逊订单,订单详情表(order_detail)里的ISBN字段为空,但原生创建的订单能正常存储该值。直接在模板里调用{$product.isbn}触发500错误,是因为模板上下文里没有初始化好的$product对象。
解决方案:修改HTMLTemplateDeliverySlip.php从产品表直接拉取ISBN
- 找到目标文件:
/classes/pdf/HTMLTemplateDeliverySlip.php - 定位到
getTemplateVars()方法,找到遍历订单详情的循环(处理$order_details的代码块) - 在循环内部,通过订单详情的
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
相关产品推荐
相关产品推荐

