我是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中添加一个类,以获取具有相同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所显示的其他产品的颜色属性是什么。