Jump to content

ASTUCE afficher la liste des couleurs dans la liste des produits + survol


Recommended Posts

Bonjour,
J'ai remarqué que plusieurs membres de la communauté souhaitaient afficher la liste
des couleurs disponibles par produit dans la page catégorie, je vous propose donc une petite astuce pour la mise en œuvre de cette fonctionnalité dans prestashop 1.4.
Cette fonctionnalité permet aussi au passage de la souris sur la couleur, d'afficher l'image associée.


Modifier le fichier controllers/CategoryController.php

En cas de mise à jour de prestashop vous perdrez la modification, il faudra donc la rajouter à la main.
Après la ligne

$cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);


Ajouter :

/* @TODO VERU CORE PRESTASHOP */
foreach ($cat_products as $key => $cat_product) {
                       $product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang));
                       $colors = array();
                       $attributesGroups = Db::getInstance()->ExecuteS('
                       SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
                       a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
                       FROM `ps_product_attribute` pa
                       LEFT JOIN `ps_product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
                       LEFT JOIN `ps_product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
                       LEFT JOIN `ps_attribute` a ON a.`id_attribute` = pac.`id_attribute`
                       LEFT JOIN `ps_attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
                       LEFT JOIN `ps_attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
                       LEFT JOIN `ps_attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
                       WHERE pa.`id_product` =  '.(int)($product->id).'
                       AND al.`id_lang` =  '.self::$cookie->id_lang.'
                       AND agl.`id_lang` = '.self::$cookie->id_lang.'
                       AND ag.`is_color_group` = 1
                       GROUP BY attribute_color
                       ORDER BY agl.`public_name`, al.`name`');
                       if (Db::getInstance()->numRows())
                       {
                           foreach ($attributesGroups AS $k => $row)
                           {
                               /* Color management */
                               if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default)
                               {
                                   $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
                                   $colors[$row['id_attribute']]['name']  = $row['attribute_name'];
                                   $colors[$row['id_attribute']]['id_image']  =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1);
                               }
                           }
                       }
                       $cat_products[$key]['colors'] = $colors;
                   }



modifier le fichier product-list.tpl

<!-- Affiche la liste des coloris disponibles pour le produit-->
{if !empty($product.colors)}


                           {foreach from=$product.colors key=id_attribute item=color}

                           {/foreach}

   {/if} 



pour le onMouseover toujours dans le fichier product-list ajouter l'attribut id à l'image du produit:


Link to comment
Share on other sites

Tout dabord merci de t'être interressé à ce petit ajout qui pourrait nous rendre la vie plus facile.

Je viens de tester en local et pas à pas ton code, mais problème, je n'ai rien d'afficher sur FO.

J'ai bien ajouté le code dans Category Controller, et j'ai mis le second code dans le right block des produits de la liste, mais rien n'apparait...

Bizarre

En tout cas merci encore

Link to comment
Share on other sites

Finalement j'ai un peu cherché et j'ai reussi ( en ce qui concerne l'affichage)

Dans firebug le code était bien présent, mais les balises étaient cachée...

bref du coup pour afficher les couleurs toujours dans product-list.tpl :

            <!-- Affiche la liste des coloris disponibles pour le produit-->
{if !empty($product.colors)}


                           {foreach from=$product.colors key=id_attribute item=color}

                           {/foreach}

   {/if} 



maintenant je vais essayer aussi de mon coté pour que les couleurs soient prises en comptent lors du click et de l'envoie au panier, mais je promet rien, je suis pas dev :s

Link to comment
Share on other sites

J'ai rajouté le onclick :

            <!-- Affiche la liste des coloris disponibles pour le produit-->
{if !empty($product.colors)}


                           {foreach from=$product.colors key=id_attribute item=color}

                           {/foreach}

   {/if} 



mais lorsque je clique sur les couleurs, firebug mais met un jolie "updateColorSelect is not defined". Pourtant dans la fiche produit, c'est le même code....

je comprend pas tout.

Link to comment
Share on other sites

  • 3 weeks later...
  • 6 months later...

Si ça peut aider ! Test sous Prestashop 1.4.5.1

 

Dans override/controllers/ créez un fichier CategoryController.php

 

Copiez ceci dans CategoryController.php :

 


<?php
class CategoryController extends CategoryControllerCore
{

public function productListAssign()
{
	$hookExecuted = false;
	Module::hookExec('productListAssign', array('nbProducts' => &$this->nbProducts, 'catProducts' => &$this->cat_products, 'hookExecuted' => &$hookExecuted));
	if(!$hookExecuted) // The hook was not executed, standard working
	{
		self::$smarty->assign('categoryNameComplement', '');
		$this->nbProducts = $this->category->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
		$this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"
		$this->cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);
	/* @TODO VERU CORE PRESTASHOP */
				foreach ($this->cat_products as $key => $cat_product) {
					$product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang));
					$colors = array();

					$groupcolor = 1;
					/* O pour afficher aussi les produits hors stock*/
					$prodquantity = 1;

					$attributesGroups = Db::getInstance()->ExecuteS('
					SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
					a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
					FROM `' . _DB_PREFIX_ . 'product_attribute` pa
					LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
					LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
					LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
					LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
					LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
					LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
					WHERE pa.`id_product` =  '.$cat_product['id_product'].'
					AND al.`id_lang` =  '.self::$cookie->id_lang.'
					AND agl.`id_lang` = '.self::$cookie->id_lang.'
					AND ag.`is_color_group` = '.$groupcolor.'
					AND pa.quantity >= '.$prodquantity.'
					');
					if (Db::getInstance()->numRows())
					{
						foreach ($attributesGroups AS $k => $row)
						{
							/* Color management */
							if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default)
							{
								$colors[$row['id_attribute']]['value'] = $row['attribute_color'];
								$colors[$row['id_attribute']]['name']  = $row['attribute_name'];
								$colors[$row['id_attribute']]['id_image']  =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1);
							}
						}
					}
					$this->cat_products[$key]['colors'] = $colors;
				}
	}
	else // Hook executed, use the override
		$this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"
	self::$smarty->assign('nb_products', (int)$this->nbProducts);
}
}

?>

 

 

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

 

Remplacer le code de l'image par celui-ci :

 

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

 

 

{if isset($product.colors) && $product.colors}
	<!-- colors -->
	    <p>
		{foreach from=$product.colors key='id_attribute' item='color'}
			<a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}">
   			 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
   		 </a>
		{/foreach}

		</p>
	{/if}

Link to comment
Share on other sites

Je pense avoir réalisé la demande il y a un an (lors d'un test d'entretien où j'ai pour la première fois appris le nom "PrestaShop" et installé la solution). C'était en 1.3.5, mais ça doit pas être sorcier de vous aider vu votre avancement.

 

Je vais jeter un œil à ça :)

Link to comment
Share on other sites

Bonjour à tous,

Je viens de remarquer que plusieurs d'entre vous butait un petit peu sur l'astuce.

Depuis prestashop 1.4.5 il est en effet plus propre de surchager la méthode avec des classes override.

Après avoir effectué différent test de perf il est aussi préférable de passer par une méthode static( cela évite d'exécuter à chaque requête http,la requête sql).

Sur prestashop 1.4.1

Dans la classe Product

 

methode : getProductProperties($id_lang, $row)

Après

$row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array());

Ajoutez


 /* ajout pour les couleur dans la liste des produits */
 $colors = array();
  $attributesGroups = Db::getInstance()->ExecuteS('
  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
  FROM `ps_product_attribute` pa
  LEFT JOIN `ps_product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
  LEFT JOIN `ps_product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
  LEFT JOIN `ps_attribute` a ON a.`id_attribute` = pac.`id_attribute`
  LEFT JOIN `ps_attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
  LEFT JOIN `ps_attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
  LEFT JOIN `ps_attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
  AND al.`id_lang` =  '.(int)($id_lang).'
  AND agl.`id_lang` = '.(int)($id_lang).'
  AND ag.`is_color_group` = 1
  GROUP BY attribute_color
  ORDER BY agl.`public_name`, al.`name`');
  if (Db::getInstance()->numRows())
  {
   foreach ($attributesGroups AS $k => $rowcolo)
   {
	/* Color management */
	if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
	{
	 $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
	 $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
	 $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
	}
   }
  }
 $row['colors'] = $colors;

Comme indiqué plus haut il est préférable de surcharger la méthode avec "override" en créant une nouvelle classe dans le répertoire.

Astuce mis en place sur le site www.catbibi.com.

  • Like 1
Link to comment
Share on other sites

Bonjour,

 

Comment faire pour afficher tous les groupes d'attributs ou un groupe spécifique ?

(ex : taille, capacité..)

 

merci

 

 

Bonjour, pour afficher un group en particulier.

 

Test sous Prestashop 1.4.5.1

 

Dans override/classes/ créez un fichier Category.php

 

Copiez ceci dans Category.php :

 

<?php

class Category extends CategoryCore {

public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) {
	global $cookie;
	if (!$checkAccess OR !$this->checkAccess($cookie->id_customer))
		return false;

	if ($p < 1)
		$p = 1;

	if (empty($orderBy))
		$orderBy = 'position';
	else
	/* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
		$orderBy = strtolower($orderBy);

	if (empty($orderWay))
		$orderWay = 'ASC';
	if ($orderBy == 'id_product' OR $orderBy == 'date_add')
		$orderByPrefix = 'p';
	elseif ($orderBy == 'name')
		$orderByPrefix = 'pl';
	elseif ($orderBy == 'manufacturer') {
		$orderByPrefix = 'm';
		$orderBy = 'name';
	} elseif ($orderBy == 'position')
		$orderByPrefix = 'cp';

	if ($orderBy == 'price')
		$orderBy = 'orderprice';

	if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
		die(Tools::displayError());

	$id_supplier = (int) (Tools::getValue('id_supplier'));

	/* Return only the number of products */
	if ($getTotal) {
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
		SELECT COUNT(cp.`id_product`) AS total
		FROM `' . _DB_PREFIX_ . 'product` p
		LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product`
		WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
		' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : ''));
		return isset($result) ? $result['total'] : 0;
	}

	$sql = '
	SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new,
		(p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
	FROM `' . _DB_PREFIX_ . 'category_product` cp
	LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product`
	LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1)
	LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
											   AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . '
												  AND tr.`id_state` = 0)
	LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`)
	LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
	WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
	' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : '');

	if ($random === true) {
		$sql .= ' ORDER BY RAND()';
		$sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts);
	} else {
		$sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . '
		LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n);
	}


	$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);

	foreach ($result as $nb => $resultat) {


		/* id_attribute_group */
		$id_du_groupe = 4;

		$replace_sql = 'SELECT al.name
		FROM `'._DB_PREFIX_.'product_attribute` pa
		JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
		JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).')
		JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`)
		WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1';
		$attributs = Db::getInstance()->ExecuteS($replace_sql);

			foreach($attributs as $attributs_tab){
				$result[$nb]['attribute'][] = $attributs_tab['name'];

			}
	}

	if ($orderBy == 'orderprice')
		Tools::orderbyPrice($result, $orderWay);

	if (!$result)
		return false;

	return Product::getProductsProperties($id_lang, $result);
}

}
?>

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

 

entre <ul>

{foreach from=$products item=product name=products} ... <li> ... et

 

</li>

{/foreach}

</ul>

 

<p>
	  {foreach from=$product.attribute key='id_attribute' item='attribute'}
				   {$attribute}
	  {/foreach}

</p>

 

 

Pour trouver l'id du groupe : dans le BO onglet => Attributs et groupes éditez l'attribut désiré, dans l'url cherchez &id_attribute_group=

 

 

Reste à coder un lien avec du javascript.

  • Like 2
Link to comment
Share on other sites

Hello Ichigok,

 

Je viens de tester ta solution et rien ne s'affiche. J'ai bien renseigné l'id dans la classe.

Une idée ?

 

 

Bonjour,

 

L'id de quel attribut ?

 

Pour la couleur il faut activer la Palette de coloris dans les déclinaisons.

Link to comment
Share on other sites

 

 

Bonjour,

 

L'id de quel attribut ?

 

Pour la couleur il faut activer la Palette de coloris dans les déclinaisons.

 

bonjour,

dans ta classe, j'ai mis l'id attribut 2 qui correspond à la capacité par exemple.

 

/* id_attribute_group */

$id_du_groupe = 2;

Ensuite, dans mon tpl, j'ai mis le m^me code que toi et rien ne s'affiche...

++

Link to comment
Share on other sites

 

bonjour,

dans ta classe, j'ai mis l'id attribut 2 qui correspond à la capacité par exemple.

 

/* id_attribute_group */

$id_du_groupe = 2;

Ensuite, dans mon tpl, j'ai mis le m^me code que toi et rien ne s'affiche...

++

 

 

Si le groupe d'attributs a bien des déclinaisons et qu'elles ont été ajoutées dans la fiche du produit et un stock supérieur à 0.... :wacko:

 

Essayez ce product-list.tpl pour voir si le problème vient de là.

 

 


{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
	<li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
		<div class="center_block">
			<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
			<h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
			<p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>
		</div>																				
		<div class="right_block">
			{if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
			{elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
			{if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
			{if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
			<div>
				{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
				{if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if}
			</div>
			{/if}


						{if $product.attribute}
							<p>
								{foreach from=$product.attribute key=id_attribute item=attribute name=attribute}
									{$attribute}
								{/foreach}
							</p>
						{/if}



			{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
				{if ($product.allow_oosp || $product.quantity > 0)}
					<a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
				{else}
						<span class="exclusive">{l s='Add to cart'}</span>
				{/if}
			{/if}
			<a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
			{if isset($comparator_max_item) && $comparator_max_item}
				<p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p>
			{/if}
		</div>
	</li>
{/foreach}
</ul>
<!-- /Products list -->
{/if}


Link to comment
Share on other sites

Hello ichigoK,

 

Merci pour ton bout de code :) Il marche parfaitement en local sur une version 1.4.5.

 

En revanche, j'ai un petit problème car j'insère l'attribut 4 correspond à "Taille".

 

Et parfois, j'ai XS, Rose / XS, Orange, ect donc le code marque sous le produit : XS XS au lieu d'un seul XS.

 

Aurais-tu une petite idée pour éviter les doublons ? Merci !

Link to comment
Share on other sites

  • 1 month later...

Petit déterrage,

Pour que le code de @activ-developpement.net fonctionne, il faut modifier le préfixe des tables sinon rien ne s'affiche

 

 

voici le code :

/* ajout pour les couleur dans la liste des produits */
 $colors = array();
	  $attributesGroups = Db::getInstance()->ExecuteS('
	  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
	  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
	  FROM `'._DB_PREFIX_.'product_attribute` pa
	  LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
	  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
	  AND al.`id_lang` =  '.(int)($id_lang).'
	  AND agl.`id_lang` = '.(int)($id_lang).'
	  AND ag.`is_color_group` = 1
	  GROUP BY attribute_color
	  ORDER BY agl.`public_name`, al.`name`');
	  if (Db::getInstance()->numRows())
	  {
	   foreach ($attributesGroups AS $k => $rowcolo)
	   {
			/* Color management */
			if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
			{
		   $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
		   $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
		   $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
			}
	   }
	  }
 $row['colors'] = $colors;

 

En suite dans le tlp voici le code :

			{if isset($product.colors) && $product.colors }
			<!-- colors -->
				Existe en couleur :<p class="pcolor">
					{foreach from=$product.colors key='id_attribute' item='color' name='color'}
							<a id="{$product.id_product}-{$color.id_image}" class="color_pick" style="background: {$color.value};" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}">
							{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />{/if}
					 </a>
					{/foreach}

				</p>
			{/if}

 

Testé sur PS 1.4.6.2 et 1.4.7.3

 

Ckarone

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

  • 3 weeks later...

 

 

Bonjour, pour afficher un group en particulier.

 

Test sous Prestashop 1.4.5.1

 

Dans override/classes/ créez un fichier Category.php

 

Copiez ceci dans Category.php :

 

<?php

class Category extends CategoryCore {

public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) {
	global $cookie;
	if (!$checkAccess OR !$this->checkAccess($cookie->id_customer))
		return false;

	if ($p < 1)
		$p = 1;

	if (empty($orderBy))
		$orderBy = 'position';
	else
	/* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
		$orderBy = strtolower($orderBy);

	if (empty($orderWay))
		$orderWay = 'ASC';
	if ($orderBy == 'id_product' OR $orderBy == 'date_add')
		$orderByPrefix = 'p';
	elseif ($orderBy == 'name')
		$orderByPrefix = 'pl';
	elseif ($orderBy == 'manufacturer') {
		$orderByPrefix = 'm';
		$orderBy = 'name';
	} elseif ($orderBy == 'position')
		$orderByPrefix = 'cp';

	if ($orderBy == 'price')
		$orderBy = 'orderprice';

	if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
		die(Tools::displayError());

	$id_supplier = (int) (Tools::getValue('id_supplier'));

	/* Return only the number of products */
	if ($getTotal) {
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
		SELECT COUNT(cp.`id_product`) AS total
		FROM `' . _DB_PREFIX_ . 'product` p
		LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product`
		WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
		' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : ''));
		return isset($result) ? $result['total'] : 0;
	}

	$sql = '
	SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new,
		(p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
	FROM `' . _DB_PREFIX_ . 'category_product` cp
	LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product`
	LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1)
	LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
											   AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . '
												  AND tr.`id_state` = 0)
	LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`)
	LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ')
	LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
	WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
	' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : '');

	if ($random === true) {
		$sql .= ' ORDER BY RAND()';
		$sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts);
	} else {
		$sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . '
		LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n);
	}


	$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);

	foreach ($result as $nb => $resultat) {


		/* id_attribute_group */
		$id_du_groupe = 4;

		$replace_sql = 'SELECT al.name
		FROM `'._DB_PREFIX_.'product_attribute` pa
		JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
		JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).')
		JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`)
		WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1';
		$attributs = Db::getInstance()->ExecuteS($replace_sql);

			foreach($attributs as $attributs_tab){
				$result[$nb]['attribute'][] = $attributs_tab['name'];

			}
	}

	if ($orderBy == 'orderprice')
		Tools::orderbyPrice($result, $orderWay);

	if (!$result)
		return false;

	return Product::getProductsProperties($id_lang, $result);
}

}
?>

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

 

entre <ul>

{foreach from=$products item=product name=products} ... <li> ... et

 

</li>

{/foreach}

</ul>

 

<p>
	  {foreach from=$product.attribute key='id_attribute' item='attribute'}
				   {$attribute}
	  {/foreach}

</p>

 

 

Pour trouver l'id du groupe : dans le BO onglet => Attributs et groupes éditez l'attribut désiré, dans l'url cherchez &id_attribute_group=

 

 

Reste à coder un lien avec du javascript.

salut,

merci pour l'astuce ca marche super bien !

par contre j'aimerais pouvoir faire la même chose pour les meilleurs ventes, les nouveautés et les promotions. j'ai essayé de bidouiller mais je n'arrives pas a afficher les couleurs sur ces pages.

 

merci

 

je suis sous prestashop 1.4.6.2

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Grâce au code d'Ichigok j'arrive à afficher le groupe d'attributs que je veux dans ma liste de produits mais j'aimerais les rendre clickable et que cela influence l'affichage du prix dans la liste des produits. Ou alors au moins que la sélection de l'attribut soit reflétée lors de l'achat.

 

J'imagine qu'il faut coder un lien dans product-list.tpl apres {$attribute}

 

  <p>
   {foreach from=$product.attribute key=id_attribute item=attribute name=attribute}
																			{$attribute}
																	{/foreach}
 </p> 

 

 

Quelqu'un à le code pour faire ca ?

 

merci

Link to comment
Share on other sites

  • 5 weeks later...

merci d'avoir partagé l'astuce, cela fonctionne, mais il manque un détail.

 

Sur une même référence il y a plusieurs déclinaisons :

 

Pull Rouge : M, L, XL

Pull vert : M, L, XL

Pull Marron : M, L XL

 

Cela va afficher sur la product list "Tailles : M, M, M, L, L, L, XL, XL, XL"

Étant donné que c'est la même référence,

l'idéal serait de voir afficher la taille qu'à partir du moment où une des déclinaisons est disponible en stock,

et non pas pour chaque déclinaisons.

 

Si j'ai juste le pull rouge et bleu en M, cela ne devra plus afficher M, M, mais juste M

 

si quelqu'un sait remédier à ça, l'astuce sera parfaite !

Link to comment
Share on other sites

  • 3 weeks later...

Hello,

 

Pour répondre à un MP, le PHP est à ajouter dans la classe Product.php (si possible via override) dans la méthode

public static function getProductProperties($id_lang, $row)

 

Voici la méthode complète

 public static function getProductProperties($id_lang, $row)
{
 if (!$row['id_product'])
  return false;
 // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries
 $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
 if ((!isset($row['id_product_attribute']) OR !$row['id_product_attribute'])
  AND ((isset($row['cache_default_attribute']) AND ($ipa_default = $row['cache_default_attribute']) !== NULL)
OR ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))
 )
  $row['id_product_attribute'] = $ipa_default;
 if (!isset($row['id_product_attribute']))
  $row['id_product_attribute'] = 0;
 // Tax
 $usetax = Tax::excludeTaxeOption();
 $cacheKey = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)($usetax);
 if (array_key_exists($cacheKey, self::$producPropertiesCache))
  return self::$producPropertiesCache[$cacheKey];
 // Datas
 $link = new Link();
 $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang));
 $row['link'] = $link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
 $row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0;
 $row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6));
 if (self::$_taxCalculationMethod == PS_TAX_EXC)
 {
  $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
  $row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) :  NULL), 6);
  $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2, NULL, false, false);
 }
 else
 {
  $row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2), 2);
  $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6, NULL, false, false);
 }
 $row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, NULL, true, true, 1, true, NULL, NULL, NULL, $specific_prices);
 $row['specific_prices'] = $specific_prices;
 if ($row['id_product_attribute'])
 {
  $row['quantity_all_versions'] = $row['quantity'];
  $row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : NULL);
 }
 $row['id_image'] = Product::defineProductImage($row, $id_lang);
 $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
 $row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array());
/* ajout pour les couleur dans la liste des produits */
 $colors = array();
	  $attributesGroups = Db::getInstance()->ExecuteS('
	  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
	  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
	  FROM `'._DB_PREFIX_.'product_attribute` pa
	  LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
	  LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
	  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
	  AND al.`id_lang` =  '.(int)($id_lang).'
	  AND agl.`id_lang` = '.(int)($id_lang).'
	  AND ag.`is_color_group` = 1
	  GROUP BY attribute_color
	  ORDER BY agl.`public_name`, al.`name`');
	  if (Db::getInstance()->numRows())
	  {
	   foreach ($attributesGroups AS $k => $rowcolo)
	   {
			/* Color management */
			if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
			{
		   $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
		   $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
		   $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
			}
	   }
	  }
 $row['colors'] = $colors;
 // Pack management
 $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
 $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array();
 $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0;
 if ($row['pack'] AND !Pack::isInStock($row['id_product']))
  $row['quantity'] =  0;
 self::$producPropertiesCache[$cacheKey] = $row;
 return self::$producPropertiesCache[$cacheKey];
}

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

salut,

merci pour l'astuce ca marche super bien !

par contre j'aimerais pouvoir faire la même chose pour les meilleurs ventes, les nouveautés et les promotions. j'ai essayé de bidouiller mais je n'arrives pas a afficher les couleurs sur ces pages.

 

merci

 

je suis sous prestashop 1.4.6.2

 

J'ai aussi testé le code d' ichigoK ( sur version 1.4.5.1 ) et ça ne fonctionne pas chez moi :( il ne se passe rien du tout .. J'ai utilisé l' override.

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

Bonjour,

 

Merci pour ta réponse je n'avais vu que tu avais répondu sur le post.

 

J'ai du louper quelque chose car çà ne fonctionne toujours pas.

 

J'ai ajouté le code couleur dans le fichier php classes/Product.php comme tu l' a indiqué plus haut.

 

Par contre j'ai un problème avec le fichier tpl. J'ai ajouté le code après la description dans la div center_block

 

  <div class="center_block">
<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}</a>
<!-- link manufacturer img -->
<span class="logo_manufacturer_productlist">
<img src="{$img_manu_dir}{$product.id_manufacturer}-small.jpg" alt="{$product_manufacturer->name}" width="45" height="45" />
</span>
<h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:50:'...'|escape:'htmlall':'UTF-8'}</a></h3>
<p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:100:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:220:'...'|strip_tags:'UTF-8'}</a></p>
{if isset($product.colors) && $product.colors }
							<!-- colors -->
									Existe en couleur :<p class="pcolor">
											{foreach from=$product.colors key='id_attribute' item='color' name='color'}
															<a id="{$product.id_product}-{$color.id_image}" class="color_pick" style="background: {$color.value};" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}">
															{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />{/if}
											 </a>
											{/foreach}

									</p>
							{/if}
  </div>

 

la ou j'ai le code j'ai du blanc

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

  • 4 weeks later...

Bonsoir,

 

Je me permets d'intervenir dans votre sujet de discussion, en effet j'ai besoin d'afficher les couleurs (et taille facultatif) sur le listing produits dans la catégorie, je précise que j'ai la version 1.4.7.3

 

J'ai donc inséré dans le fichier product-list.tpl

 

{*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2011 PrestaShop SA
*  @version  Release: $Revision: 1.4 $
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
{if isset($products)}
    <!-- Products list -->
    <ul id="product_list" class="clear">
    {foreach from=$products item=product name=products}
		    <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
				    <div class="center_block">
						    <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
						    <h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
						    <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>
				    </div>																																						 
				    <div class="right_block">
						    {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
						    {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
						    {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
						    {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
						    <div>
								    {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
								    {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if}
						    </div>
						    {/if}


												    {if $product.attribute}
														    <p>
																    {foreach from=$product.attribute key=id_attribute item=attribute name=attribute}
																		    {$attribute}
																    {/foreach}
														    </p>
												    {/if}



						    {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
								    {if ($product.allow_oosp || $product.quantity > 0)}
										    <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
								    {else}
												    <span class="exclusive">{l s='Add to cart'}</span>
								    {/if}
						    {/if}
						    <a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
						    {if isset($comparator_max_item) && $comparator_max_item}
								    <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p>
						    {/if}
				    </div>
		    </li>
    {/foreach}
    </ul>
    <!-- /Products list -->
{/if}


 

 

et dans un nouveau fichier créé category.php :

 

<?php

class Category extends CategoryCore {

    public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) {
		    global $cookie;
		    if (!$checkAccess OR !$this->checkAccess($cookie->id_customer))
				    return false;

		    if ($p < 1)
				    $p = 1;

		    if (empty($orderBy))
				    $orderBy = 'position';
		    else
		    /* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
				    $orderBy = strtolower($orderBy);

		    if (empty($orderWay))
				    $orderWay = 'ASC';
		    if ($orderBy == 'id_product' OR $orderBy == 'date_add')
				    $orderByPrefix = 'p';
		    elseif ($orderBy == 'name')
				    $orderByPrefix = 'pl';
		    elseif ($orderBy == 'manufacturer') {
				    $orderByPrefix = 'm';
				    $orderBy = 'name';
		    } elseif ($orderBy == 'position')
				    $orderByPrefix = 'cp';

		    if ($orderBy == 'price')
				    $orderBy = 'orderprice';

		    if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
				    die(Tools::displayError());

		    $id_supplier = (int) (Tools::getValue('id_supplier'));

		    /* Return only the number of products */
		    if ($getTotal) {
				    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				    SELECT COUNT(cp.`id_product`) AS total
				    FROM `' . _DB_PREFIX_ . 'product` p
				    LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product`
				    WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
				    ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : ''));
				    return isset($result) ? $result['total'] : 0;
		    }

		    $sql = '
		    SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new,
				    (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
		    FROM `' . _DB_PREFIX_ . 'category_product` cp
		    LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product`
		    LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1)
		    LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ')
		    LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ')
		    LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
		    LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ')
		    LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
																							   AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . '
																									  AND tr.`id_state` = 0)
		    LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`)
		    LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ')
		    LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
		    WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . '
		    ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : '');

		    if ($random === true) {
				    $sql .= ' ORDER BY RAND()';
				    $sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts);
		    } else {
				    $sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . '
				    LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n);
		    }


		    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);

		    foreach ($result as $nb => $resultat) {


				    /* id_attribute_group */
				    $id_du_groupe = 4;

				    $replace_sql = 'SELECT al.name
				    FROM `'._DB_PREFIX_.'product_attribute` pa
				    JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
				    JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).')
				    JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`)
				    WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1';
				    $attributs = Db::getInstance()->ExecuteS($replace_sql);

						    foreach($attributs as $attributs_tab){
								    $result[$nb]['attribute'][] = $attributs_tab['name'];

						    }
		    }

		    if ($orderBy == 'orderprice')
				    Tools::orderbyPrice($result, $orderWay);

		    if (!$result)
				    return false;

		    return Product::getProductsProperties($id_lang, $result);
    }

}
?>

 

J'ai activé la palette couleur mais de nouvelles informations sont apparus sur le listing produit de la page catégorie sauf les couleurs, pourriez-vous m'éclairer pour que les couleurs s'afichent s'il vous plaît.

 

Dans l'attente.

 

Cordialement.

Link to comment
Share on other sites

Pourriez vous me dire si le code que j'ai mis au moins est bon?

 

En fait je crois le soucis vient de l'id...je connais le numéro de l'attribut mais je vois pas comment l'intégrer dans le code..

 

Parce que voilà ce que ça me donne sur l'interface:

 

visuel.jpg

Link to comment
Share on other sites

  • 3 months later...
  • 2 weeks later...
  • 1 month later...

Bonjour,

 

Je n'arrive toujours pas a trouver le bon code pour avoir les couleurs avec changement d'image.

 

Ci quelqu'un a le bon code qui fonctionne sur presta 1.4.6.2 (uniquement pour les couleurs).

 

Le code que j'ai trouvé sur un autre sujet et qui a le plus de résultat, j'ai tous qui s'affiche sauf que lorsque je clique sur une couleur je n'ai plus d'image est le suivant:

 

J'ai ajouté ce fichier nomé CategoryController.php dans le dossieroverride/controllers/

 

Merci pour votre aide.

 

<?php
class CategoryController extends CategoryControllerCore
{

    public function productListAssign()
    {
		    $hookExecuted = false;
		    Module::hookExec('productListAssign', array('nbProducts' => &$this->nbProducts, 'catProducts' => &$this->cat_products, 'hookExecuted' => &$hookExecuted));
		    if(!$hookExecuted) // The hook was not executed, standard working
		    {
				    self::$smarty->assign('categoryNameComplement', '');
				    $this->nbProducts = $this->category->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
				    $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"
				    $this->cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);
		    /* @TODO VERU CORE PRESTASHOP */
								    foreach ($this->cat_products as $key => $cat_product) {
										    $product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang));
										    $colors = array();

										    $groupcolor = 1;
										    /* O pour afficher aussi les produits hors stock*/
										    $prodquantity = 1;

										    $attributesGroups = Db::getInstance()->ExecuteS('
										    SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
										    a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
										    FROM `' . _DB_PREFIX_ . 'product_attribute` pa
										    LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
										    LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
										    LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
										    LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
										    LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
										    LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
										    WHERE pa.`id_product` =  '.$cat_product['id_product'].'
										    AND al.`id_lang` =  '.self::$cookie->id_lang.'
										    AND agl.`id_lang` = '.self::$cookie->id_lang.'
										    AND ag.`is_color_group` = '.$groupcolor.'
										    AND pa.quantity >= '.$prodquantity.'
										    ');
										    if (Db::getInstance()->numRows())
										    {
												    foreach ($attributesGroups AS $k => $row)
												    {
														    /* Color management */
														    if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default)
														    {
																    $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
																    $colors[$row['id_attribute']]['name']  = $row['attribute_name'];
																    $colors[$row['id_attribute']]['id_image']  =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1);
														    }
												    }
										    }
										    $this->cat_products[$key]['colors'] = $colors;
								    }
		    }
		    else // Hook executed, use the override
				    $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"
		    self::$smarty->assign('nb_products', (int)$this->nbProducts);
    }
}

?>

 

Puis dans fichiet product-list.tpl j'ai ajouté pour l'image:

<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>

 

et pour le code color picker

{if isset($product.colors) && $product.colors}
<p class="colors">
  {foreach from=$product.colors key='id_attribute' item='color'}
<a onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}"  style="background: {$color.value};"></a>
									  {/foreach}
							 </p>
{/if}[/size][/font][/color]
[color=#343943][font=Arial, Helvetica, sans-serif][size=3]
Link to comment
Share on other sites

Bonjour,

 

Je n'arrive toujours pas a trouver le bon code pour avoir les couleurs avec changement d'image.

 

Ci quelqu'un a le bon code qui fonctionne sur presta 1.4.6.2 (uniquement pour les couleurs).

 

Le code que j'ai trouvé sur un autre sujet et qui a le plus de résultat, j'ai tous qui s'affiche sauf que lorsque je clique sur une couleur je n'ai plus d'image est le suivant:

 

J'ai ajouté ce fichier nomé CategoryController.php dans le dossieroverride/controllers/

 

Merci pour votre aide.

 

 

 

et pour le code color picker

{if isset($product.colors) && $product.colors}
<p class="colors">
  {foreach from=$product.colors key='id_attribute' item='color'}
<a onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}"  style="background: {$color.value};"></a>
									  {/foreach}
							 </p>
{/if}[/size][/font][/color]
[color=#343943][font=Arial, Helvetica, sans-serif][size=3]

 

 

Bonjour, essayez avec ceci :

 

{foreach from=$product.colors key='id_attribute' item='color'}
   <a id="{$product.id_product}-{$color.id_image}" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}">
    <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
   </a>
  {/foreach}

Link to comment
Share on other sites

Merci pour ton aide, j'ai essayé mais c'est moins bien (je n'ai plus les carrés avec couleur mais du texte pour color picker et le même résultat)

 

Par contre j'ai regardé pour le chargement de l'image. Le problème viens du chemin pour l'image en déclinaison.

 

Pour l'image normal (attribut par défaut) j'ai le chemin img/p/3/7/37-home.jpg et quand je clique sur une des couleurs (par exemple pour la couleur bleu) j'ai le chemin img/p/1-40.jpg alors que çà devrait être img/p/3/8/38-home.jpg

Link to comment
Share on other sites

Bon j'ai testé avec un autre produit (ipod shuffle) çà fonctionne pour le changement d'image ouf (pour le premier produit ipod nano, c'est normale que çà ne fonctionnait pas étant donné que je n'ai pas d'image dans ce dossier ce qui n'est pas normal / boutique presta 1.4.6.2 de test fraîchement installé).

 

Le code est donc bon.

 

Par contre il me manque -home sur le chemin de l'image pour que celle-ci soit au bon format.

 

Testé avec l'ancien système de stockage d'image. Je vais tester avec le nouveau système (ma boutique en prod est avec le nouveau système).

Link to comment
Share on other sites

J'ai testé avec le nouveau système de stockage d'image et çà ne fonctionne pas, ce code fonctionne donc avec l'ancien système en ajoutant -home

<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />

 

<img src="{$img_col_dir}{$id_attribute}-home.jpg" alt="{$color.name}" />

 

Si tu as une idée pour le chemin de l'image avec le nouveau système de classement.

Link to comment
Share on other sites

Ça c'est fait, les différentes couleurs s'affichent bien mais le chemin de l'image n'est pas bon pour les images avec une configuration nouveau système de classement d'image

src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'

Je ne s'ais pas quoi mettre

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

Merci pour ton aide. Je crois que je n'y serais jamais arrivé sans toi.

 

J'ai juste apporté une petite modif pour le color picker et la taille de l'image par ce code

 

{if isset($product.colors) && $product.colors}
<p class="colors">
	  {foreach from=$product.colors key='id_attribute' item='color'}
	   <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image, 'home')}'" title="{$color.name}" style="background: {$color.value};">
					   </a>
	  {/foreach}
</p>
 {/if}

Link to comment
Share on other sites

Par contre çà ne fonctionne pas avec le module navigation à facette dès qu'il est activé il n'y a plus de color picker :(

 

Je regarde ça ! ;)

 

Compatible 1.4.6.2 avec le nouveau système de stockage des images produits Activer et la Navigation à Facettes.

 

Bon pour que tout fonctionne il vaut mieux changer de méthode, en utilisant ce code : http://www.prestasho...roduits-survol/

 

 

Dans override/classes/ créez le fichier Product.php et copiez ceci dedans :

 

<?php
class Product extends ProductCore
{
public static function getProductProperties($id_lang, $row)
{
 if (!$row['id_product'])
  return false;
 // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries
 $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
 if ((!isset($row['id_product_attribute']) OR !$row['id_product_attribute'])
  AND ((isset($row['cache_default_attribute']) AND ($ipa_default = $row['cache_default_attribute']) !== NULL)
OR ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))
 )
  $row['id_product_attribute'] = $ipa_default;
 if (!isset($row['id_product_attribute']))
  $row['id_product_attribute'] = 0;
 // Tax
 $usetax = Tax::excludeTaxeOption();
 $cacheKey = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)($usetax);
 if (array_key_exists($cacheKey, self::$producPropertiesCache))
  return self::$producPropertiesCache[$cacheKey];
 // Datas
 $link = new Link();
 $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang));
 $row['link'] = $link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
 $row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0;
 $row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6));
 if (self::$_taxCalculationMethod == PS_TAX_EXC)
 {
  $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
  $row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) :  NULL), 6);
  $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2, NULL, false, false);
 }
 else
 {
  $row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2), 2);
  $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6, NULL, false, false);
 }
 $row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, NULL, true, true, 1, true, NULL, NULL, NULL, $specific_prices);
 $row['specific_prices'] = $specific_prices;
 if ($row['id_product_attribute'])
 {
  $row['quantity_all_versions'] = $row['quantity'];
  $row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : NULL);
 }
 $row['id_image'] = Product::defineProductImage($row, $id_lang);
 $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
 $row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array());



 /* ajout pour les couleur dans la liste des produits */
 $colors = array();
	  $attributesGroups = Db::getInstance()->ExecuteS('
	  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
	  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
	  FROM `' . _DB_PREFIX_ . 'product_attribute` pa
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
	  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
	  AND al.`id_lang` =  '.(int)($id_lang).'
	  AND agl.`id_lang` = '.(int)($id_lang).'
	  AND ag.`is_color_group` = 1
	  GROUP BY attribute_color
	  ORDER BY agl.`public_name`, al.`name`');
	  if (Db::getInstance()->numRows())
	  {
	   foreach ($attributesGroups AS $k => $rowcolo)
	   {
			/* Color management */
			if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
			{
			 $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
			 $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
			 $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
			}
	   }
	  }
 $row['colors'] = $colors;




 // Pack management
 $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
 $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array();
 $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0;
 if ($row['pack'] AND !Pack::isInStock($row['id_product']))
  $row['quantity'] =  0;
 self::$producPropertiesCache[$cacheKey] = $row;
 return self::$producPropertiesCache[$cacheKey];
}

}
?>

 

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

 

 

Remplacer le code de l’image par celui-ci :

 

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" title="{$product.legend|escape:htmlall:'UTF-8'}" width="{$homeSize.width}" height="{$homeSize.height}" />

 

 

{if isset($product.colors) && $product.colors}
	  {foreach from=$product.colors key='id_attribute' item='color'}
	   <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}">
			<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
	   </a>

	  {/foreach}
	{/if}

 

 

Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut.

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

Merci çà fonctionne parfaitement. La méthode est même mieux puisqu'il n'est pas nécessaire d’activer le color picker sur la page produit pour que le color picker s'affiche dans la liste de produit. :)

 

Encore merci pour ton aide...

Link to comment
Share on other sites

Merci çà fonctionne parfaitement. La méthode est même mieux puisqu'il n'est pas nécessaire d’activer le color picker sur la page produit pour que le color picker s'affiche dans la liste de produit. :)

 

Encore merci pour ton aide...

 

:ph34r: de rien ! ;)

Link to comment
Share on other sites

J'abuse un peu beaucoup. Serait tu comment afficher également les textures.

 

Je pense qu'il faut ajouter un truc dans se style dans product-list (repris dans la page produit):

 

{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" />

 

Et dans Product.php (repris dans ProductController)

 

/* Color management */
						    if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) OR (file_exists(_PS_COL_IMG_DIR_.$rowcolo['id_attribute'].'.jpg'))) AND $rowcolo['id_attribute_group'] == $this->product->id_color_default)

 

J'ai une belle erreur 500 mais je ne doit pas être loin de la vérité.

Link to comment
Share on other sites

J'abuse un peu beaucoup. Serait tu comment afficher également les textures.

 

Je pense qu'il faut ajouter un truc dans se style dans product-list (repris dans la page produit):

 

{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" />

 

Et dans Product.php (repris dans ProductController)

 

/* Color management */
							if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) OR (file_exists(_PS_COL_IMG_DIR_.$rowcolo['id_attribute'].'.jpg'))) AND $rowcolo['id_attribute_group'] == $this->product->id_color_default)

 

J'ai une belle erreur 500 mais je ne doit pas être loin de la vérité.

 

Bonjour,

 

Simplement en mettant des images dans les valeurs des attributs et avec ce bout de code comme dans mon précédent post il me semble :

 

<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />

Link to comment
Share on other sites

Mince, çà ne marche pas pour moi pour les textures. J'ai bien la texture sur la page produit mais pas dans la liste de produit.

 

J'ai essayé avec ton code sans modif.

Avec ce code le color picker des articles avec fond de couleur html, je n'ai pas de couleur html mais un fichier image qu'il ne trouve pas (color picker avec image texture alors que je n'ai pas de texture pour ces attributs)

 

Et pour un article avec attribut couleur type texture je n'ai rien qui s'affiche.

 

{if isset($product.colors) && $product.colors}
			  {foreach from=$product.colors key='id_attribute' item='color'}
			   <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}">
						    <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
			   </a>

			  {/foreach}
		    {/if}

 

 

 

et avec ce code j'ai bien le color picker pour les attributs avec couleur html mais je n'ai pas le color picker pour les attribut avec texture.

 

{if isset($product.colors) && $product.colors}
<p class="colors">
	  {foreach from=$product.colors key='id_attribute' item='color'}
	   <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image, 'home')}'" title="{$color.name}" style="background: {$color.value};">
{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" />{/if}
					   </a>
	  {/foreach}
</p>
 {/if}

Link to comment
Share on other sites

Mince, çà ne marche pas pour moi pour les textures. J'ai bien la texture sur la page produit mais pas dans la liste de produit.

 

 

 

Pourquoi ne pas mettre une couleur par défaut ou une image à toutes les valeurs couleur plutôt que d'utiliser

style="background: {$color.value};"

???

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

{if isset($product.colors) && $product.colors}
  {foreach from=$product.colors key='id_attribute' item='color'}
   <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}">
 {if file_exists($img_col_dir.$id_attribute)}
  <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" />
 {else}
  <span id="colors" style="background-color:{$color.value}; color:{$color.value};">co</span>
 {/if}
   </a>
  {/foreach}
    {/if}

 

 

et le css

 

span#colors{
width: 16px;
height: 16px;
padding:2px;
display:inline;
cursor: pointer
}

Link to comment
Share on other sites

  • 2 months later...

Bonsoir,

 

j'arrive pas a le faire marcher sur 1.5.2

 

quelqu'un peut m'aider ? merci

 

 

 

Bonjour,

 

 

Dans override/classes/ éditez le fichier Product.php

 

Copiez ceci dans Product.php :

 

<?php
class Product extends ProductCore
{
public static function getProductProperties($id_lang, $row, Context $context = null)
{
	if (!$row['id_product'])
		return false;
	if ($context == null)
		$context = Context::getContext();
	// Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it:
	// consider adding it in order to avoid unnecessary queries
	$row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
	if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute'])
		&& ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null)
			|| ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))))
		$row['id_product_attribute'] = $ipa_default;
	if (!Combination::isFeatureActive() || !isset($row['id_product_attribute']))
		$row['id_product_attribute'] = 0;
	// Tax
	$usetax = Tax::excludeTaxeOption();
	$cache_key = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)$usetax;
	if (isset($row['id_product_pack']))
		$cache_key .= '-pack'.$row['id_product_pack'];
	if (isset(self::$producPropertiesCache[$cache_key]))
		return self::$producPropertiesCache[$cache_key];
	// Datas
	$row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang);
	$row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
	$row['attribute_price'] = 0;
	if (isset($row['id_product_attribute']) && $row['id_product_attribute'])
		$row['attribute_price'] = (float)Product::getProductAttributePrice($row['id_product_attribute']);
	$row['price_tax_exc'] = Product::getPriceStatic(
		(int)$row['id_product'],
		false,
		((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
		(self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)
	);
	if (self::$_taxCalculationMethod == PS_TAX_EXC)
	{
		$row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
		$row['price'] = Product::getPriceStatic(
			(int)$row['id_product'],
			true,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			6
		);
		$row['price_without_reduction'] = Product::getPriceStatic(
			(int)$row['id_product'],
			false,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			2,
			null,
			false,
			false
		);
	}
	else
	{
		$row['price'] = Tools::ps_round(
			Product::getPriceStatic(
				(int)$row['id_product'],
				true,
				((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
				2
			),
			2
		);
		$row['price_without_reduction'] = Product::getPriceStatic(
			(int)$row['id_product'],
			true,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			6,
			null,
			false,
			false
		);
	}
	$row['reduction'] = Product::getPriceStatic(
		(int)$row['id_product'],
		(bool)$usetax,
		(int)$row['id_product_attribute'],
		6,
		null,
		true,
		true,
		1,
		true,
		null,
		null,
		null,
		$specific_prices
	);
	$row['specific_prices'] = $specific_prices;
	if ($row['id_product_attribute'])
	{
		$row['quantity_all_versions'] = $row['quantity'];
		$row['quantity'] = Product::getQuantity(
			(int)$row['id_product'],
			$row['id_product_attribute'],
			isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null
		);
	}
	else
		$row['quantity'] = Product::getQuantity((int)$row['id_product']);
	$row['id_image'] = Product::defineProductImage($row, $id_lang);
	$row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
	$row['attachments'] = array();
	if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments'])
		$row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']);
	$row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0);
	// ajout pour les couleur dans la liste des produits
	$colors = array();
	  $groupcolor = 1;
	  /* O pour afficher aussi les produits hors stock*/
	  $prodquantity = 0;
	  $attributesGroups = Db::getInstance()->ExecuteS('
	  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
	  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
	  FROM `' . _DB_PREFIX_ . 'product_attribute` pa
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
	  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
	  AND al.`id_lang` =  '.(int)($id_lang).'
	  AND agl.`id_lang` = '.(int)($id_lang).'
	  AND ag.`is_color_group` = '.$groupcolor.'
	  AND pa.quantity >= '.$prodquantity.'
	  GROUP BY id_attribute
	  ');
	  if (Db::getInstance()->numRows())
	  {
	   foreach ($attributesGroups AS $k => $rowcolo)
	   {
			// Color management
			if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
			{
			 $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
			 $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
			 $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
			}
	   }
	  }
	$row['colors'] = $colors;
	// Pack management
	$row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
	$row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array();
	$row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0;
	if ($row['pack'] && !Pack::isInStock($row['id_product']))
		$row['quantity'] = 0;
	self::$producPropertiesCache[$cache_key] = $row;
	return self::$producPropertiesCache[$cache_key];
}
}
?>

 

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

Remplacer le code de l’image par celui-ci :

 

 

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

 

 

{if isset($product.colors) && $product.colors}
			<!-- colors -->
				<p>
					{foreach from=$product.colors key='id_attribute' item='color'}
							<a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'">
							 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
					 </a>
					{/foreach}
					</p>
			{/if}

 

 

Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut.

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

Merci pour ton aide,

ça m'affiche rien, juste une partie en blanc et c'est n'est pas lors du survol

dans le code le bloc des couleurs existe mais les images des couleurs ne s'affiche pas !!

 

:(

 

Avez-vous bien mis des images aux attributs couleur, ainsi qu'une couleur par defaut ?

 

 

Pour le survol un petit coup de grogoole sur les événements javascript et hop !

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour a tous,

 

Je viens de tester sur Prestashop 1.5.3 et apparemment ça ne fonctionne pas ...

 

Quelqu'un pourrait-il me dire si c'est moi qui est fait une mauvaise manip ou si ce n'est réellement pas compatible avec cette version ?

 

Cordialement.

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

Bonjour a tous,

 

Je viens de tester sur Prestashop 1.5.3 et apparemment ça ne fonctionne pas ...

 

Quelqu'un pourrait-il me dire si c'est moi qui est fait une mauvaise manip ou si ce n'est réellement pas compatible avec cette version ?

 

Cordialement.

 

Bonjour,

 

Fonctionne très bien sur prestashop 1.5.3.

 

 

Cordialement,

Link to comment
Share on other sites

slt et merci pour ce topic donc si j ai bien compris celui ci affiche les déclinaisons couleur et change la photo au survol sur la liste produit pour les 1.5.3.1 il y a que ceci ci dessous à faire?

 

Dans override/classes/ éditez le fichier Product.php

 

Copiez ceci dans Product.php :

 

CODE

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

Remplacer le code de l’image par celui-ci :

 

 

CODE

CODE

Link to comment
Share on other sites

Merci ta réponse AkrOpad.

 

Après avoir, re-tenter l'intégration, effectivement je vois de l'avancement.

 

J'ai bien maintenant des couleurs qui s'affichent cependant, cela fonctionne partiellement je m'explique :

 

J'ai une couleur "Noir" où j'ai appliquer un code couleur #000000 mais pas d'image de "texture".

 

Au lieu, de m'afficher un carré avec un code couleur, cela va chercher une image qui n'existe pas <_< .

 

Deuxième point, j'ai des couleurs à deux ou trois variantes par exemple : Rouge/Blanc, pour lequel ça ne fonctionne pas ...

 

Là encore j'ai un problème, il ne va pas chercher cette attribut :( .

 

Sinon, ça m'a l'air de fonctionner correctement, d'ailleurs merci à tous pour cette formidable astuce !

 

Quelqu'un a une solution pour les problèmes énumérés ?

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

Merci ta réponse AkrOpad.

 

Après avoir, re-tenter l'intégration, effectivement je vois de l'avancement.

 

J'ai bien maintenant des couleurs qui s'affichent cependant, cela fonctionne partiellement je m'explique :

 

J'ai une couleur "Noir" où j'ai appliquer un code couleur #000000 mais pas d'image de "texture".

 

Au lieu, de m'afficher un carré avec un code couleur, cela va chercher une image qui n'existe pas <_< .

 

Deuxième point, j'ai des couleurs à deux ou trois variantes par exemple : Rouge/Blanc, pour lequel ça ne fonctionne pas ...

 

Là encore j'ai un problème, il ne va pas chercher cette attribut :( .

 

Sinon, ça m'a l'air de fonctionner correctement, d'ailleurs merci à tous pour cette formidable astuce !

 

Quelqu'un a une solution pour les problèmes énumérés ?

 

 

Bonjour,

 

Il faut quand même mettre des images par défaut et mettre des images bicolores Rouge/Blanc par exemple et ça fonctionnera nickel.

 

 

Cordialement,

Link to comment
Share on other sites

Un autre soucis chez moi, lors que je clique sur la couleur, l'image est bien changé cependant l'adresse de l'image affiché n'est pas bonne ... Quelqu'un a t-il une solution ?

 

Il semblerais que cette ligne n'est pas bonne :

 

Ou alors c'est que les URLs des images de couleurs ne sont pas disponible depuis la product_list car lorsque je vais voir dans le détail elles correspondent à ce format :

 

{id_image}/{nom_produit}.jpg

 

Quelqu'un peux t-il me donner une coup de pouce ?

 

Merci d'avance. Cordialement, Anthony

Link to comment
Share on other sites

Chez moi tout fonctionne, mais avec ce code :

 

<!-- Color -->{if isset($product.colors) && $product.colors}		  
<div class="switcher_color">
{foreach from=$product.colors key='id_attribute' item='color'}
<a id="{$product.id_product}-{$color.id_image}" class="color_pick" onmouseover="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" onmouseout="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $product.id_image)}'">
<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
</a>
{/foreach}
</div>
{/if} <!-- -->

 

Je précise que je l'ai appliquer pour une passage à la souris et non pour un clic.

 

Merci en tout cas (en particulier à AkrOpad ;) , je suis arrivée à mes fins c'est parfait.

 

Reste plus qu'à appliquer cette astuce pour les tailles et c'est bingo !!!

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

Quelqu'un aurait une idée pour appliquer de ce code pour les autres attribut sur Prestashop 1.5.3 ?

 

J'ai vu en début de post que quelqu'un y était arrivée avec ton aide AkrOpad ...

 

Mais je ne vois pas comment appliquer ça ...

 

Merci d'avance. Cordialement

Link to comment
Share on other sites

Bonjour,

 

Merci pour cet astuce qui fonctionne pour moi sur PS 1.5.2

 

je voulais savoir, si on peut afficher seulement les couleurs disponibles (en stock)

 

et pour les couleurs y'a pas moins que le code le récupère automatiquement au lieu de chercher des images et donc il faut ajouter une image pour chaque couleur ?

 

et si possible une méthode pour afficher par exemple l'attribut "Taille" ?

 

Merci

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

Bonjour,

 

Merci pour cet astuce qui fonctionne pour moi sur PS 1.5.2

 

je voulais savoir, si on peut afficher seulement les couleurs disponibles (en stock)

 

et pour les couleurs y'a pas moins que le code le récupère automatiquement au lieu de chercher des images et donc il faut ajouter une image pour chaque couleur ?

 

et si possible une méthode pour afficher par exemple l'attribut "Taille" ?

 

Merci

 

 

Bonjour,

 

Dans le bas du code que je donne plus haut dans le fichier "override/classes/Product.php" il y a une variable pour afficher aussi les couleurs des produits hors stock par défaut 0.

/* O pour afficher aussi les produits hors stock */
$prodquantity = 0;

 

 

Oui il est préférable pour le client de voire une image du produit de la couleur voulu et donc il faut mettre les images de chaque couleur et les cocher dans les déclinaisons suivant la couleur.

 

 

Pour la taille il y avait une solution qui ne marche plus sous Prestashop 1.5.

 

Il y a un module pour Prestashop 1.5 :

 

http://www.prestasho...-prestashop-15/

 

 

 

Cordialement,

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

 

Dans le bas du code que je donne plus haut dans le fichier "override/classes/Product.php" il y a une variable pour afficher aussi les couleurs des produits hors stock par défaut 0.

/* O pour afficher aussi les produits hors stock */
$prodquantity = 0;

 

 

Bonsoir,

 

Du coup, je dois mettre quoi ?

 

et Merci bcp, vraiment tu gère :)

Link to comment
Share on other sites

  • 3 weeks later...

Si le groupe d'attributs a bien des déclinaisons et qu'elles ont été ajoutées dans la fiche du produit et un stock supérieur à 0.... :wacko:

 

Essayez ce product-list.tpl pour voir si le problème vient de là.

 

 


{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
	<li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
		<div class="center_block">
			<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
			<h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
			<p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>
		</div>																				
		<div class="right_block">
			{if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span>
			{elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if}
			{if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
			{if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
			<div>
				{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
				{if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if}
			</div>
			{/if}


						{if $product.attribute}
							<p>
								{foreach from=$product.attribute key=id_attribute item=attribute name=attribute}
									{$attribute}
								{/foreach}
							</p>
						{/if}



			{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
				{if ($product.allow_oosp || $product.quantity > 0)}
					<a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
				{else}
						<span class="exclusive">{l s='Add to cart'}</span>
				{/if}
			{/if}
			<a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
			{if isset($comparator_max_item) && $comparator_max_item}
				<p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p>
			{/if}
		</div>
	</li>
{/foreach}
</ul>
<!-- /Products list -->
{/if}


j'ai suivi tes recommandations et j'ai rien qui s'affiche , par contre si je me sers de ton product-list.tpl mes produits ne sont plus alignés mais ça marche (j'utilise le thème collection)

mon product-list.tpl est celui ci

{*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2011 PrestaShop SA
*  @version  Release: $Revision: 6594 $
*  @license	http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
 <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if ($smarty.foreach.products.index+1) % (4)==0}alternate_item{else}item{/if} clearfix">
  {*<div class="left_block">
{if isset($comparator_max_item) && $comparator_max_item}
 <p class="compare">
  <input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} />
  <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label>
 </p>
{/if}
  </div>  *} {if !empty($product.colors)}

						{foreach from=$product.colors key=id_attribute item=color}

						{/foreach}

{/if}
  <div class="product_img">
<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
 <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'prod_cat')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" />
 {if isset($product.new) && $product.new == 1}
  <span class="new">{l s='New'}</span>
 {/if}
 {if isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}
  <span class="discount">{l s='Reduced price!'}</span>
 {/if}
</a>
  </div>
  <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
  <!-- <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:100:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:220:'...'|strip_tags:'UTF-8'}</a></p> -->

  {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}
<span class="on_sale">{l s='On sale!'}</span>
  {/if}
  {if isset($product.online_only) && $product.online_only}
<span class="online_only">{l s='Online only!'}</span>
  {/if}
  {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
  <div class="content_price">
{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}
 <span class="price" style="display: inline;">
 {if !$priceDisplay}
  {convertPrice price=$product.price}
 {else}
  {convertPrice price=$product.price_tax_exc}
 {/if}
 </span>
 <br />
{/if}
{if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}
 <span class="availability">
 {if ($product.allow_oosp || $product.quantity > 0)}
	   {l s='Available'}
 {elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}
  {l s='Product available with different options'}
 {else}
  {l s='Out of stock'}
 {/if}
 </span>
{/if}
  </div>
  {/if}				  
  <!-- <div class="right_block">




{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity == 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
 {if ($product.allow_oosp || $product.quantity > 0)}
  <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}"><span></span>{l s='Add to cart'}</a><br />
 {else}
  <span class="exclusive"><span></span>{l s='Add to cart'}</span><br />
 {/if}
{/if}
<a class="button lnk_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>


  </div> -->
 </li>
{/foreach}
</ul>
<!-- /Products list -->
{/if}

une idée ? merci d'avance

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

j'ai suivi tes recommandations et j'ai rien qui s'affiche , par contre si je me sers de ton product-list.tpl mes produits ne sont plus alignés mais ça marche (j'utilise le thème collection)

mon product-list.tpl est celui ci

 

une idée ? merci d'avance

 

 

Bonjour,

 

 

Dans override/classes/ éditez le fichier Product.php

 

Copiez ceci dans Product.php :

 

<?php
class Product extends ProductCore
{
public static function getProductProperties($id_lang, $row, Context $context = null)
{
	if (!$row['id_product'])
		return false;
	if ($context == null)
		$context = Context::getContext();
	// Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it:
	// consider adding it in order to avoid unnecessary queries
	$row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
	if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute'])
		&& ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null)
			|| ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))))
		$row['id_product_attribute'] = $ipa_default;
	if (!Combination::isFeatureActive() || !isset($row['id_product_attribute']))
		$row['id_product_attribute'] = 0;
	// Tax
	$usetax = Tax::excludeTaxeOption();
	$cache_key = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)$usetax;
	if (isset($row['id_product_pack']))
		$cache_key .= '-pack'.$row['id_product_pack'];
	if (isset(self::$producPropertiesCache[$cache_key]))
		return self::$producPropertiesCache[$cache_key];
	// Datas
	$row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang);
	$row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
	$row['attribute_price'] = 0;
	if (isset($row['id_product_attribute']) && $row['id_product_attribute'])
		$row['attribute_price'] = (float)Product::getProductAttributePrice($row['id_product_attribute']);
	$row['price_tax_exc'] = Product::getPriceStatic(
		(int)$row['id_product'],
		false,
		((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
		(self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)
	);
	if (self::$_taxCalculationMethod == PS_TAX_EXC)
	{
		$row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
		$row['price'] = Product::getPriceStatic(
			(int)$row['id_product'],
			true,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			6
		);
		$row['price_without_reduction'] = Product::getPriceStatic(
			(int)$row['id_product'],
			false,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			2,
			null,
			false,
			false
		);
	}
	else
	{
		$row['price'] = Tools::ps_round(
			Product::getPriceStatic(
				(int)$row['id_product'],
				true,
				((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
				2
			),
			2
		);
		$row['price_without_reduction'] = Product::getPriceStatic(
			(int)$row['id_product'],
			true,
			((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
			6,
			null,
			false,
			false
		);
	}
	$row['reduction'] = Product::getPriceStatic(
		(int)$row['id_product'],
		(bool)$usetax,
		(int)$row['id_product_attribute'],
		6,
		null,
		true,
		true,
		1,
		true,
		null,
		null,
		null,
		$specific_prices
	);
	$row['specific_prices'] = $specific_prices;
	if ($row['id_product_attribute'])
	{
		$row['quantity_all_versions'] = $row['quantity'];
		$row['quantity'] = Product::getQuantity(
			(int)$row['id_product'],
			$row['id_product_attribute'],
			isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null
		);
	}
	else
		$row['quantity'] = Product::getQuantity((int)$row['id_product']);
	$row['id_image'] = Product::defineProductImage($row, $id_lang);
	$row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
	$row['attachments'] = array();
	if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments'])
		$row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']);
	$row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0);
	// ajout pour les couleur dans la liste des produits
	$colors = array();
	  $groupcolor = 1;
	  /* O pour afficher aussi les produits hors stock*/
	  $prodquantity = 0;
	  $attributesGroups = Db::getInstance()->ExecuteS('
	  SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
	  a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity`
	  FROM `' . _DB_PREFIX_ . 'product_attribute` pa
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
	  LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
	  WHERE pa.`id_product` =  '.(int)$row['id_product'].'
	  AND al.`id_lang` =  '.(int)($id_lang).'
	  AND agl.`id_lang` = '.(int)($id_lang).'
	  AND ag.`is_color_group` = '.$groupcolor.'
	  AND pa.quantity >= '.$prodquantity.'
	  GROUP BY id_attribute
	  ');
	  if (Db::getInstance()->numRows())
	  {
	   foreach ($attributesGroups AS $k => $rowcolo)
	   {
			// Color management
			if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] )
			{
			 $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color'];
			 $colors[$rowcolo['id_attribute']]['name']  = $rowcolo['attribute_name'];
			 $colors[$rowcolo['id_attribute']]['id_image']  =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1);
			}
	   }
	  }
	$row['colors'] = $colors;
	// Pack management
	$row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
	$row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array();
	$row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0;
	if ($row['pack'] && !Pack::isInStock($row['id_product']))
		$row['quantity'] = 0;
	self::$producPropertiesCache[$cache_key] = $row;
	return self::$producPropertiesCache[$cache_key];
}
}
?>

 

 

 

Et Copiez ceci dans themes/votre_theme/product-list.tpl :

Remplacer le code de l’image par celui-ci :

 

 

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

 

 

{if isset($product.colors) && $product.colors}
			<!-- colors -->
				<p>
					{foreach from=$product.colors key='id_attribute' item='color'}
							<a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'">
							 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
					 </a>
					{/foreach}
					</p>
			{/if}

 

 

Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut.

Link to comment
Share on other sites

Merci pour la Réponse AkrOpad mais ça fonctionne pas .

si je créé le fichier product.php dans override classes mes images disparaissent il me reste juste le haut du site et quand je clique sur un onglet ( menu haut) plus aucune image

et dans product-list je n'ai pas

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

Link to comment
Share on other sites

Merci pour la Réponse AkrOpad mais ça fonctionne pas .

si je créé le fichier product.php dans override classes mes images disparaissent il me reste juste le haut du site et quand je clique sur un onglet ( menu haut) plus aucune image

et dans product-list je n'ai pas

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

 

Bonjour,

 

Il faut remplacer votre ligne

<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'prod_cat')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" />

 

par

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

Link to comment
Share on other sites

ça marche pas , j'ai toujours les produits qui disparaissent ainsi que toute la partie footer quand je clique sur une catégorie il me reste que les catégories sur le left , le reste est vide .

je me demande si cela vient pas de la façon de faire le thème parce que j'ai un autre fichier qui me permets d'afficher les produits par déclinaisons dans les catégories plutôt que les produits qui marche sur un autre thème mais pas sur celui ci

pourtant un thème acheter sur add on prestashop :/

Link to comment
Share on other sites

  • 5 weeks later...

Bonjour à tous,

je viens de lire et relire tout le topic mais je n'ai pas compris comment faire pour afficher les couleurs des attribut sur la page catégorie.

J'ai bien essayer de modifier mon product.php ainsi que le product-list.tpl, j'y ai modifier la ligne

 

<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />

 

par :

 

 

<img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" />

 

mais impossible de trouver où placer :

 

{if isset($product.colors) && $product.colors}

<!-- colors -->

<p>

{foreach from=$product.colors key='id_attribute' item='color'}

<a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'">

<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />

</a>

{/foreach}

</p>

{/if}

 

 

Où dois-je copier ca ?

Ai-je modifier la bonne ligne ?

 

Ha oui, j'ai une version 1.5.3 de prestashop ...

Merci de votre aide.

Link to comment
Share on other sites

Bonjour à tous,

je viens de lire et relire tout le topic mais je n'ai pas compris comment faire pour afficher les couleurs des attribut sur la page catégorie.

J'ai bien essayer de modifier mon product.php ainsi que le product-list.tpl, j'y ai modifier la ligne

 

 

 

 

Bonjour,

 

Vous pouvez copier le deuxième bout de code au niveau de la liste des attributs par exemple.

Link to comment
Share on other sites

Merci, je l'ai placer et je vois bien une image mais celle ci n’apparaît pas, au survol de la souris, je vois bien la couleur écrite.

Comment faire pour régler ca ?

 

Merci d'avance

 

 

Les URL simplifiées sont elles activées ?

 

 

Pour le survol de la souris, dans le code du template il faut remplacer onclick par onmouseover

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

Merci, c'est impeccable pour le survol, et oui, les url simplifiées sont actives.

Que veut dire mettre des image et une couleur par default?

Enfin je veut dire, je doit rajouter des images oubien on parle des image et couleurs par default des déclinaison dans notre back-office, si c'est ca j'ai bien tout fait, je ne comprend pas pourquoi ca ne veut pas afficher les cases couleurs.

Link to comment
Share on other sites

Merci, c'est impeccable pour le survol, et oui, les url simplifiées sont actives.

Que veut dire mettre des image et une couleur par default?

Enfin je veut dire, je doit rajouter des images oubien on parle des image et couleurs par default des déclinaison dans notre back-office, si c'est ca j'ai bien tout fait, je ne comprend pas pourquoi ca ne veut pas afficher les cases couleurs.

 

Il faut mettre des image de couleur et une valeur par défaut à chaque attribut couleur.

 

Exemple allez dans :

Attributs et groupes > Cliquez sur plus de détails de Votre Groupe de couleurs > Editez vos couleurs précédemment

 

crées et ajoutez une petite image de texture de taille 16x16 pixels par exemple.

Link to comment
Share on other sites

Bonsoir a tous,

alors voila, j'ai bien ce que je voulais, à savoir des cases de couleurs pour mes produit avec déclinaisons sur la page catégorie.

Mais, je viens de m'apercevoir que le menu déroulant des déclinaison sur la page produit à été modifier, et je me retrouve avec des cases de couleurs à la place.

Sauriez-vous comment conserver les cases de couleur sur la page catégorie, mais retrouver mon menu déroulant sur la page produit?

Merci pour votre aide ;-)

Link to comment
Share on other sites

Bonjour,

 

Je déterre un peu ce topic pour savoir comment "actualiser" les prix et l'image si on affiche les déclinaisons dans le product-list?

 

Sous prestashop 1.5 j'ai réussi à créer un bouton par déclinaison mais l'image associée et le prix n'est pas inclu dans la balise.

 

Bref, je voulais savoir comment améliorer le code ou peut être ce qu'il faut coder en javascript pour pouvoir cliquer sur un attribut et modifier au clic l'image et le prix (toujours dans la product-list.

 

Pour info j'ai utiliser le code donner par aKropad pour afficher les attributs.

 

Merci pour vos réponses.

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

J'ai testé votre code en long en large et en travers mais rien y fait :(

 

je pense que c'est du au fait que je suis sur la dernière version de prestashop et qu'il y à des différences que je n'arrive pas à régler.

Auriez vous une solution pour que cela fonctionne sous la dernière version de prestashop? ou y a t'il quelque chose de mal que je fait c'est dans doute possible !

 

D'avance merci pour votre aide !

Link to comment
Share on other sites

Bonjour et merci de m'avoir lu ! :)

 

Alors j'ai fais exactement comme dans l'explication et sur différents tutoriel trouvé sur le net.

 

j'ai créer le fichier CategoryController.php dans le dossier override/classes et j'ai fait les modifications dans le fichier product_list.tpl mais rien n'y fait j'ai ma première condition if qui ne passe déjà pas alors pour le reste ....

 

Enfin bref j'ai vu que dans la dernière version de prestashop que dans le dossier override/classes il y avait deux autre dossier qui sont font et admin. y a t'il l'équivalent sur les autres versions de prestashop? Au cas ou j'ai essayé de placé CategoryController.php dans le dossier font mais ça ne marche pas mieux.

Si tu as une idée je suis preneur vraiment !

 

Pour le code utilisé c'est un copier coller de ce qu'il y a écrit plus tôt sur ce même topic.

 

Vraiment merci d'avance si je peux avoir votre aide !

 

Si je n'ai pas été assez clair hésitez pas me le signaler ! :)

Link to comment
Share on other sites

Petit Up !

 

Désolé d'insisté mais n'y a t'il pas une personne qui a utilisé cette méthode en version 1.5.4.1 de prestashop et pour qui ça a marché ?

Si c'est le cas sincèrement merci de me joindre soit en pv soit ici : [email protected].

 

D'avance Merci !

Cordialement

 

 

Bonjour,

 

Avec beaucoup de retard, vous voulez simplement afficher la liste des couleurs dans la liste des produits, c'est bien ça ?

 

Dans ce cas, allez faire un tour sur mon site vous trouverez la solution.

 

PS : Vérifiez bien que vos valeurs couleurs on bien une image et un code couleur par défaut.

 

 

Cordialement,

Link to comment
Share on other sites

Les couleurs doivent obligatoirement avoir les deux ? ou juste une couleur ou une image?

Aurais je du avoir un résultat malgré tout? car de ce que je vois la condition n'est pas prise en compte. je n'ai rien d'afficher en html .

Link to comment
Share on other sites

Les couleurs doivent obligatoirement avoir les deux ? ou juste une couleur ou une image?

Aurais je du avoir un résultat malgré tout? car de ce que je vois la condition n'est pas prise en compte. je n'ai rien d'afficher en html .

 

 

Oui les deux !

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...