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

问题描述 投票:-1回答:2

我是smarty和php的新手。

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

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

您能帮我吗?

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

php model-view-controller prestashop smarty
2个回答
0
投票

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


0
投票

我们应该在product.php中添加一个类,以获取具有相同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中还有另一个类名为AssignAttributesGroups(),它提供产品的属性。在该类中,我们应添加以下代码:

$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);

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

{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所显示的其他产品的颜色属性是什么。

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