Jump to content

[résolu] Ajouter le fabricant/marque dans les produits d'un pack


Recommended Posts

Bonjour,

 

j'essaye en vain d'ajouter le nom du fabricant/marque à côté du nom d'un produit figurant dans un pack.

 

Le code utilisé (je suis sous PS 1.5.6.0) est : 

{if $product.id_manufacturer}

Il fonctionne bien pour les produits listés dans Product-list.tpl, mais pas dans les produits listés dans un pack.

 

Ce qui est bizarre, c'est que j'arrive cependant à afficher l'image du fournisseur en utilisant le code suivant : 

{if $product.id_manufacturer}{capture assign='t_file'}img/m/{$product.id_manufacturer}-small_default.jpg{/capture}{if $t_file|file_exists}<a href="{$link->getPageLink('manufacturer.php',true)}?id_manufacturer={$product.id_manufacturer}"><img src="{$img_manu_dir}{$product.id_manufacturer}-small_default.jpg" class="img_manuf" /></a>{/if}{/if}

Une idée, une solution à ce problème ?

Faut-il ajouter une variable dans packitems ?

 

merci par avance

Edited by slett (see edit history)
Link to comment
Share on other sites

Coucou

 

je penjse que c'est 

 

{$product.manufacturer_name} pour le nom

 

@++

 

Loulou66

 

Bonjour Loulou66,

comme indiqué dans mon post, cette solution ne fonctionne pas dans la liste des produits d'un pack.

Elle fonctionne bien dans product-list.tpl, mais ne s'affiche pas s'il y a des produits dans le pack.

Une idée ?

Cordialement,

SL

Link to comment
Share on other sites

Ca devrait t'aider (si c'est bien ça que tu veux dans product.tpl) :
 

{if $packItems|@count > 0}
{foreach from=$packItems item=packItem}
<a href="{$link->getPageLink('manufacturer.php',true)}?id_manufacturer={$packItem.id_manufacturer}" style="margin-right:5px"><img src="{$img_manu_dir}{$packItem.id_manufacturer|escape:'htmlall':'UTF-8'}-medium_fab.jpg" alt="$product->name" /></a>
{/foreach}
    {elseif $product->id_manufacturer}
<a href="{$link->getPageLink('manufacturer.php',true)}?id_manufacturer={$product->id_manufacturer}"><img src="{$img_manu_dir}{$product->id_manufacturer|escape:'htmlall':'UTF-8'}-medium_fab.jpg" alt="$product->name" /></a>
{/if}
Link to comment
Share on other sites

 

Ca devrait t'aider (si c'est bien ça que tu veux dans product.tpl) :

 

{if $packItems|@count > 0}
{foreach from=$packItems item=packItem}
<a href="{$link->getPageLink('manufacturer.php',true)}?id_manufacturer={$packItem.id_manufacturer}" style="margin-right:5px"><img src="{$img_manu_dir}{$packItem.id_manufacturer|escape:'htmlall':'UTF-8'}-medium_fab.jpg" alt="$product->name" /></a>
{/foreach}
    {elseif $product->id_manufacturer}
<a href="{$link->getPageLink('manufacturer.php',true)}?id_manufacturer={$product->id_manufacturer}"><img src="{$img_manu_dir}{$product->id_manufacturer|escape:'htmlall':'UTF-8'}-medium_fab.jpg" alt="$product->name" /></a>
{/if}

 

 

Merci Semor pour ton code,

cependant celui-ci ne répond pas tout à fait à mes besoins.

 

J'ai posé la même question sur le forum anglais, et Rocky modérateur de ce forum m'a donné la solution :

{Manufacturer::getNameById($product.id_manufacturer)}

Si cela peut aider une personne ayant la même problématique que moi.

Edited by slett (see edit history)
Link to comment
Share on other sites

Coucou

 

Bien vu semor 

 

malheureusement dans le pack (d'apres le debug de ps) il n'y a pas le nom du fournisseur mais seulement l'id

 

il va falloir override la fonction "getItemTable" de la la classe "Pack" qui est appeller dans le controler "productcontroler" (Pack::getItemTable)

 

@++

 

Loulou66

Link to comment
Share on other sites

Merci Semor pour ton code,

cependant celui-ci ne répond pas tout à fait à mes besoins.

 

J'ai posé la même question sur le forum anglais, et Rocky modérateur de ce forum m'a donné la solution :

{Manufacturer::getNameById($product.id_manufacturer)}

Si cela peut aider une personne ayant la même problématique que moi.

Autant pour moi je n'avais pas vu que tu voulais juste le nom, j'aurais pu te donner le code :D

 

Tant mieux si tu l'as, pense à mettre  [RESOLU] dans le nom du topic

 

 

Coucou

 

Bien vu semor 

 

malheureusement dans le pack (d'apres le debug de ps) il n'y a pas le nom du fournisseur mais seulement l'id

 

il va falloir override la fonction "getItemTable" de la la classe "Pack" qui est appeller dans le controler "productcontroler" (Pack::getItemTable)

 

@++

 

Loulou66

 

Hum sur le coup je n'ai pas compris ton message Loulou66, je sors l'id fabricant {$packItem.id_manufacturer} ;)

 

Ce code permet d'afficher les images des fabricants des produits du pack.

 

Ma fonction 'getItemTable' (je ne me rappelle pas l'avoir modifier pour ma part, et aucun override) :

 

public static function getItemTable($id_product, $id_lang, $full = false)
{
if (!Pack::isFeatureActive())
return array();


$sql = 'SELECT p.*, product_shop.*, pl.*, MAX(image_shop.`id_image`) id_image, il.`legend`, cl.`name` AS category_default, a.quantity AS pack_quantity, product_shop.`id_category_default`, a.id_product_pack
FROM `'._DB_PREFIX_.'pack` a
LEFT JOIN `'._DB_PREFIX_.'product` p ON p.id_product = a.id_product_item
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
ON p.id_product = pl.id_product
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.')
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
ON product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
WHERE product_shop.`id_shop` = '.(int)Context::getContext()->shop->id.'
AND a.`id_product_pack` = '.(int)$id_product.'
GROUP BY product_shop.id_product';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);


foreach ($result as &$line)
$line = Product::getTaxesInformations($line);


if (!$full)
return $result;


$array_result = array();
foreach ($result as $prow)
if (!Pack::isPack($prow['id_product']))
$array_result[] = Product::getProductProperties($id_lang, $prow);
return $array_result;
}
Edited by semor (see edit history)
Link to comment
Share on other sites

Coucou

 

Eureka !!! :P

 

alors

 

créer un fichier Pack.php pour l'override avec dedans

<?php
class Pack extends PackCore
{
public static function getItemTable($id_product, $id_lang, $full = false)
	{
		if (!Pack::isFeatureActive())
			return array();

		$sql = 'SELECT p.*, product_shop.*, pl.*, MAX(image_shop.`id_image`) id_image, il.`legend`, cl.`name` AS category_default, a.quantity AS pack_quantity, product_shop.`id_category_default`, a.id_product_pack, m.`name` AS manufacturer_name
				FROM `'._DB_PREFIX_.'pack` a
				LEFT JOIN `'._DB_PREFIX_.'product` p ON p.id_product = a.id_product_item
				LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
					ON p.id_product = pl.id_product
					AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
				LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
				Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
				LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer` = m.`id_manufacturer`)
				LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.')
				'.Shop::addSqlAssociation('product', 'p').'
				LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
					ON product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
				WHERE product_shop.`id_shop` = '.(int)Context::getContext()->shop->id.'
				AND a.`id_product_pack` = '.(int)$id_product.'
				GROUP BY product_shop.id_product';
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

		foreach ($result as &$line)
			$line = Product::getTaxesInformations($line);
			
		if (!$full)
			return $result;
		

		$array_result = array();
		foreach ($result as $prow)
			if (!Pack::isPack($prow['id_product']))				
				$array_result[] = Product::getProductProperties($id_lang, $prow);
		return $array_result;
	}
}

enregistrer le dans /override/classes/

 

ensuite dans ton theme/theme/product.tpl recherche

<p>{$packItem.description_short}</p>

ajoute ou tu veut avant/apres cette ligne

<p>{$packItem.manufacturer_name}</p>

si tu veut aussi le fabricant dans la liste des produit du pack en bas de la page produit cela de passe dans le product-list.tpl avec

<p>{if isset($product.pack_quantity) && $product.pack_quantity}{$product.manufacturer_name}{/if}</p>

le fabricant apparaîtras que dans la liste des produit du pack mais pas dans les catégories qui utilisent le même fichier

 

Test sous PS 1.5.6.2

 

@++

 

Loulou66

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...