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

Php 在产品页面中,获取具有相同ean13的其他产品,php,model-view-controller,prestashop,smarty,Php,Model View Controller,Prestashop,Smarty,我是smarty和php的新手 我的情况是,我的产品参考是独一无二的,但产品ean13在一些彼此相似的产品中是相似的。我需要的是在其中一个产品页面中提供这些产品的产品id。我的意思是,当访问者打开一个产品页面时,我想显示那些具有相同ean13的产品的图像。显示图像和HTML,CSS对我来说没问题,我的问题是PHP,SMARTY应该将值从PHP文件传递到TPL文件 我想我应该在Product.php文件中编写一个函数,并将数组值传递给Product.tpl文件。但我不能 你能帮帮我吗 编辑:正如你

我是smarty和php的新手

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

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

你能帮帮我吗


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

如果您已经在product.php中创建了函数,您应该在ProductController.php中使用它,在这里您可以指定一个值,其中包含具有相同ean13的产品列表。

我们应该在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);
然后这两个值ean13_images和ean13_colos可以在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}
{foreach from=$ean13images key=k item=v}
{如果$product->id!=$v.idProduct}
  • {/if} {/foreach}
    当我们想在图像上方的鼠标上显示气球工具提示时,可以使用值ean13 COLORS来说明同一ean13显示的其他产品的颜色属性