Prestashop 1.7 将产品表中的ISBN值添加到delivery-slip.tpl

问题描述 投票:0回答:1

让我尝试解释一下我在寻找什么:

我们在产品选项中使用 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)

提前谢谢您。

php prestashop smarty
1个回答
0
投票

我的解决方案是将 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 添加到订单详细信息中,这样您就可以忘记覆盖.

© www.soinside.com 2019 - 2024. All rights reserved.