让我尝试解释一下我在寻找什么:
我们在产品选项中使用 ISBN 字段来添加包装尺寸信息。当订单直接在 Prestashop 中传递时一切都很好。但是,当我们通过 Common-Services 模块从 Amazon 导入订单时,订单详细信息表中的 ISBN 为空。这些信息显然要么没有导入,要么以某种方式被阻止。
我已经对
delivery-slip.product-tap.tpl
进行了更改:
{if empty($order_detail.product_isbn)}
---
{else}
{$order_detail.product_isbn}
{/if}
就像我说的,这仅适用于 Prestashop 订单。
对于导入的订单,我必须直接从产品表而不是订单详细信息表访问 ISBN,但使用
{$product.isbn}
不起作用。
我必须添加什么代码以及在哪里添加它(我猜是在
HTMLTemplateDeliverySlip.php
中)才能直接从产品表访问 ISBN 值?
我尝试了这个,但它给出了错误 500。我猜是因为
$product
不能在 HTMLTemplateDeliverySlip.php
中使用
{if empty($product.isbn)}
---
{else}
{$product.isbn}
{/if}
我需要类似的东西
getValue('SELECT isbn FROM '._DB_PREFIX_.'product WHERE id_product = '.(int) $order_detail.product_id)
提前谢谢您。
我的解决方案是将 ISBN 值从产品填充到 order_detail。 这可以通过重写 OrderDetail 类轻松完成。
只需在
OrderDetail.php
目录中创建一个名为 override/classes/order
的文件(如果不存在则创建它),内容如下:
<?php
class OrderDetail extends OrderDetailCore
{
public function save($null_values = false, $auto_date = true)
{
if ($this->product_id && (is_null($this->product_isbn) || $this->product_isbn == '')) {
$this->product_isbn = (string) Db::getInstance()->getValue(
"SELECT `isbn` FROM `" . _DB_PREFIX_ . "product` WHERE `id_product` = " . (int) $this->product_id
);
}
return parent::save($null_values, $auto_date);
}
}
然后从
class_index
目录中删除文件 var/cache/prod
以确保 PrestaShop 将采用您的新 OrderDetail 重写类。
目的是:当保存OrderDetail时,检查是否有product_id但没有product_isbn,在这种情况下从产品表中获取ISBN值。
但是,由于 Common Services 的 Amazon 模块是一个商业模块,而且我猜您已为此付费,因此我会要求他们在导入订单时将产品 ISBN 添加到订单详细信息中,这样您就可以忘记覆盖.