Prestashop,在产品页面中获取具有相同 ean13 的其他产品

Prestashop, Get other products with same ean13 in product page

我是 smarty 的新手 php。

我的情况是我的 product_reference 是独一无二的,但 product_ean13 在一些彼此相似的产品中是相似的。我需要的是在其中一个产品页面中包含 product_id 这些产品。我的意思是,当访问者打开产品页面时,我想显示那些具有相同 ean13 的产品的图像。显示图像和 HTML、CSS 对我来说没问题,我的问题是 PHP,SMARTY 应该将值从 PHP 文件传递​​到 TPL 文件。

我想我应该在 Product.php 文件中编写一个函数并将数组值传递给 product.tpl 文件。但我做不到。

你能帮帮我吗?

已编辑:您可能知道 Prestashop 1.6 的一个弱点是,如果您的产品本质上是有颜色和尺寸的,就像衣服和智能手机一样!你有两种方法来创建它们。第一种方法是将它们创建为一个产品的组合,第二种方法是将它们创建为独立且不相关的产品。第一种方法有一个好处,当客户访问它们时,所有这些都将显示在产品页面中,并且在类别页面中也有暴露的弱点,所有这些属性将被视为一个产品。(想象一下所有颜色之间的一件衬衫只看到一件,你的客户可能更喜欢蓝色,但类别页面中总是显示红色。或者从类别页面不容易知道你也有智能手机的金色)这个解决方案将帮助你什么将您的产品创建为单独的产品,但您可以在每个产品的产品页面中显示它们。这样我们将利用这两种方法的好处,我们不会有任何一种方法的弱点。我们使用 ean13(或您拥有的任何其他未使用的字段,用作在相同产品中具有相同值的代码)

我在 product.php 中创建了函数,您应该在 ProductContronller.php 中使用它,在这里您可以分配一个值,其中包含具有相同 ean13 的产品列表。

我们应该在 product.php 中添加一个 class 以获得具有相同 ean13 的产品的封面图片:

public static function getImageByEan13Product($ean13_colors)
{
    $rows = Db::getInstance()->executeS('
        SELECT `id_product`, `id_image`
        FROM `'._DB_PREFIX_.'image`
        WHERE `id_product` IN ('.implode(',', $ean13_colors).') AND `cover` = 1'
    );
    $images = array();
    foreach ($rows as $row){
        $images[] = array(
            'idProduct' => $row['id_product'],
            'idImage' => $row['id_image']
        );
    }
    return $images;
}

和以下函数获取包含相同 ean13 代码的产品的颜色属性:

public static function getColorByEan13Product($ean13)
{
    $rows = Db::getInstance()->executeS('
    SELECT `id_product`
    FROM `'._DB_PREFIX_.'product`
    WHERE `ean13` = '.$ean13.' AND `active` = 1 AND `id_product` IN (SELECT DISTINCT `id_product` FROM `'._DB_PREFIX_.'stock_available` WHERE `quantity` > 0)');
    $colors = array();
    foreach ($rows as $row){
        $colors[] = $row['id_product'];                 
    }
    return $colors;
}

并且 ProductController.php 中还有另一个 class 名为 assignAttributesGroups() ,它提供产品的属性。在此 class 我们应该添加以下代码:

$ean13_colors = array();
$ean13_colors = Product::getColorByEan13Product($this->product->ean13);
$this->context->smarty->assign('ean13colors', $ean13_colors);

$ean13_images = array();
$ean13_images = Product::getImageByEan13Product($ean13_colors);
$this->context->smarty->assign('ean13images', $ean13_images);

然后这两个值 ean13_images 和 ean13_coloes 可以在 TPL 文件 product.tpl 中使用并代替颜色属性显示。就像下面的代码:

{foreach from=$ean13images key=k item=v}
    {if $product->id != $v.idProduct}
        <li>
            <a href="{$link->getProductLink($v.idProduct)|escape:'html':'UTF-8'}" class="pro_column_left selected">
            <img src="{$link->getImageLink($product->link_rewrite, $v.idImage, 'small_default')}" height="{$smallSize.height}" width="{$smallSize.width}" class="replace-2x img-responsive" {if !isset($from_product_secondary_column) || !$from_product_secondary_column} itemprop="image"{/if} />
            </a>
        </li>
    {/if}
{/foreach}

值 ean13colors 可用于我们希望在鼠标悬停在图像上时显示气球工具提示,以说明同一 ean13 显示的其他产品的颜色属性是什么。