Jump to content

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


Recommended Posts

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 .

 

ça marche nickel sur prestashop 1.5.4.1 et sans image les couleurs du produit s'affichent en lettre.

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

Après des dizaine de test décidément rien ne va !

 

Je n'ai pas les couleur d'afficher et pourtant j'ai bien fait comme indiqué sur ton tutoriel sur ton site.

 

J'ai vu que tu avais testé sous la 1.5.4.1 et que c'était passé aussi je voulais savoir si c'était passé chez toi?

C'est bien dans le dossier classes qui est dans le dossier override que je dois créer e fichier Product.php ?

Dans le dossier classes il ya d'autre fichier d'ou ma question

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

Après des dizaine de test décidément rien ne va !

 

Je n'ai pas les couleur d'afficher et pourtant j'ai bien fait comme indiqué sur ton tutoriel sur ton site.

 

J'ai vu que tu avais testé sous la 1.5.4.1 et que c'était passé aussi je voulais savoir si c'était passé chez toi?

C'est bien dans le dossier classes qui est dans le dossier override que je dois créer e fichier Product.php ?

Dans le dossier classes il ya d'autre fichier d'ou ma question

 

Oui, ça marche sur serveur local et distant.

C'est bien dans override/classes qu'il faut créer le fichier product.php

  • Like 1
Link to comment
Share on other sites

Je fais les test sur une version de base prestashop toujours 1.5.4.1 pour voir si ça vient d'un bout de code que j'ai peut être enlever ou je ne sais quoi.

A la base je me sert du thème par défaut de prestashop donc je vois pas quoi mais on sait jamais !

D'accord je teste en local moi car en distant ça ne veut rien savoir :(

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

Je fais les test sur une version de base prestashop toujours 1.5.4.1 pour voir si ça vient d'un bout de code que j'ai peut être enlever ou je ne sais quoi.

A la base je me sert du thème par défaut de prestashop donc je vois pas quoi mais on sait jamais !

D'accord je teste en local moi car en distant ça ne veut rien savoir :(

 

le cache peut-être ? le code du template pour afficher les couleurs est-il encapsulé dans une autre condition ? ...

  • Like 1
Link to comment
Share on other sites

non aucune je te met mon code du fichier product-list.tpl :

 

{*
* 2007-2013 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-2013 PrestaShop SA
*  @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 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}" />
   </a>
   <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'|truncate:35:'...'}</a></h3>
   {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}
   {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 (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
   <div class="content_price1">
 {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price1" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
   </div>
   {/if}
   <!-- colors -->
   {if isset($product.colors) && $product.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}
  </div>
 </li>
{/foreach}
</ul>
<!-- /Products list -->
{/if}

 

si tu vois le soucis je suis preneur ^^

Link to comment
Share on other sites

D'accord d'accord c'est vraiment rageant chez moi rien y fait je vais recompiler (encore ) le smarty vidé tout le cache etc...

 

Merci de vos réponses en tout cas. Je teste sur le champ !

 

Ca marche enfin ! Visiblement un oubli de cache de ma part ! Bref tout fonctionne manque plus qu'a gérer le css !

Enorme merci encore

Juste le soucis maintenant que j'ai c'est quand je clique sur une couleur il me met un point d'interrogation mais c'est peut etre dans les config produit non ?

Edited by Lotfi69 (see edit history)
  • Like 1
Link to comment
Share on other sites

D'accord d'accord c'est vraiment rageant chez moi rien y fait je vais recompiler (encore ) le smarty vidé tout le cache etc...

 

Merci de vos réponses en tout cas. Je teste sur le champ !

 

Ca marche enfin ! Visiblement un oubli de cache de ma part ! Bref tout fonctionne manque plus qu'a gérer le css !

Enorme merci encore

Juste le soucis maintenant que j'ai c'est quand je clique sur une couleur il me met un point d'interrogation mais c'est peut etre dans les config produit non ?

 

 

Remplacez le code du template par celui-ci !

 

{if isset($product.colors) && $product.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='{$link->getImageLink($product.link_rewrite, $color.id_image)}'">
							 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
					 </a>
				    {/foreach}
				    </p>
		    {/if}

  • Like 1
Link to comment
Share on other sites

Tu es vraiment le meilleur !

Encore merci tout marche nickel !

j'ai plus qu'a le gérer au survol plutôt qu'au clic et c'est dans la poche :)

Merci beaucoup vraiment

 

c'est super simple, au cas où : onMouseover à la place de onclick dans le code du template ;)

  • Like 1
Link to comment
Share on other sites

Bonjour,

J'ai un petit souci avec les textures :( , ça fait des heures que je cherche mais sans succès :angry: , pour les couleurs pas de problème

voici le bout de code qui fonctionne avec les couleurs mais ne m'affiche pas les textures il m'affiche la couleur par défaut ( j'ai pourtant bien créer une texture avec un code couleur) voir capture 1

 

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

<span class="color_text">{l s='Available colors :'}</span>

{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, 'homcat')}'" onmouseout="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $product.id_image, 'homcat')}'" title="{$color.name}" style="background: {$color.value};">

</a>

{/foreach}

{/if}

 

et voici le code qui m'affiche une texture mais je n'ai plus les couleurs, de plus la texture prend la place de l'image prix réduit :huh: voir capture 2

 

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

<span class="color_text">{l s='Available colors :'}</span>

{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, 'homcat')}'" onmouseout="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $product.id_image, 'homcat')}'" title="{$color.name}" >

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

</a>

{/foreach}

{/if}

 

V : 1.4.7.3

Merci

post-21522-0-22308500-1374927096_thumb.jpg

post-21522-0-31705100-1374927105_thumb.jpg

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

 

j'aimerais faire la même à part que je voudrais afficher les miniatures des déclinaisons à la place des carrés de couleur mais je ne sais pas trop comment m'y prendre auriez vous une solution a me soumettre?

 

Sachant que je tourne sous prestashop 1.4.10

 

En vous remerciant.

 

Tchupa.

Link to comment
Share on other sites

  • 2 weeks later...
  • 5 weeks 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}

Bonjour,

merci pour votre code, mais ça ne fonctionne pas sur prestashop 1.5.5 qui a une idée

merci

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour!

 

Je me décide à vous poster une question car j'essaie d'intégrer les couleurs dans ma page de catégorie sous Prestashop 1.5.4.1.

 

J'aurai besoin de quelques précisions si une âme charitable accepte de me répondre car je n'arrive pas à faire fonctionner cette astuce...

 

Première incertitude : l'ajout dans override > Classes > Product.php

- J'ai déjà un fichier de ce nom à cet emplacement. J'ai donc tenté d'ajouter la fonction à la fin de mon fichier existant, j'ai également tenté de le remplacer.

 

- J'ai ajouté le code dans product-list.tpl de mon thème, dans une div spécialement en dehors de la condition : la div apparait bien dans le html mais elle reste désespérément vide...

J'ai également changé la balise img afin que, une fois que les oculeurs apparaitront, celle-ci soit modifiée au survol.

 

- Mes couleurs ne sont pas toutes renseignées en "texture" mais cela devrait fonctionner sur les produits dont les couleurs ont les 2 informations (code et texture)?

 

2e incertitude : la gestion du cache

J'ai désactivé le cache Smarty ainsi que le cache serveur...

J'ai modifié le alt de l'image pour être sûre que la page est bien été rechargé (et non en cache).

 

Résultat actuel : aucune modification...

 

Je ne découvre Prestashop que depuis un mois et là, je n'ai plus de piste pour faire fonctionner cette fonctionnalité, auriez-vous une idée...?

 

Merci d'avance d'une réponse éventuelle (et merci à AkrOpad pour son astuce, ça va marcher, j'y crois!)

Link to comment
Share on other sites

Première incertitude : l'ajout dans override > Classes > Product.php

- J'ai déjà un fichier de ce nom à cet emplacement. J'ai donc tenté d'ajouter la fonction à la fin de mon fichier existant, j'ai également tenté de le remplacer.

 

 

 

- Mes couleurs ne sont pas toutes renseignées en "texture" mais cela devrait fonctionner sur les produits dont les couleurs ont les 2 informations (code et texture)?

 

2e incertitude : la gestion du cache

J'ai désactivé le cache Smarty ainsi que le cache serveur...

J'ai modifié le alt de l'image pour être sûre que la page est bien été rechargé (et non en cache).

 

Résultat actuel : aucune modification...

 

Je ne découvre Prestashop que depuis un mois et là, je n'ai plus de piste pour faire fonctionner cette fonctionnalité, auriez-vous une idée...?

 

Merci d'avance d'une réponse éventuelle (et merci à AkrOpad pour son astuce, ça va marcher, j'y crois!)

 

Bonjour,

 

- Oui il faut bien ajouter la fonction "getProductProperties" modifiée dans la classe Product, fichier :  "override > classes > Product.php".

 

- Ajoutez un code couleur et une texture à toutes vos valeurs de couleur.

 

- Désactivez le cache et le vider

 

- L'url Rewrite est-il activé ?

 

 

Cordialement,

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

Merci Arkopad pour ta réponse!

 

Je te confirme que la fonction getProductProperties a été ajoutée à la fin du Product.php d'origine, dans override/classes/

 

Chacune des couleurs a un code ET une texture maintenant.

 

L'image du produit est bien modifiée dans product-list.tpl (j'ai bien un id défini pour celle-ci)

 

J'ai intégré le code suivant dans ce même fichier :

	<div id="attributes_list">
                 {if isset($product.colors) && $product.colors}
				    <p>
					    {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)}'">
								 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
						 </a>
					    {/foreach}
                                    </p>
  	    {/if}

 	</div>

Voici le résultat dans le html : <div id="attributes_list"> </div>

Si je commente le if de ce bout de code, le html donne : <div id="attributes_list"><p>  </p></div>

 

J'ai désactivé le cache dans Performances > Smarty

Pour vider le cache, faut-il faire une autre manipulation? Ou juste refaire un appel de page dans le navigateur?

 

Enfin, je te confirme que l'url rewrite est activé. Je te remercie pour ton aide car cette fonction me parait effectivement incontournable pour les prochaines versions!

Link to comment
Share on other sites

Merci Arkopad pour ta réponse!

 

Je te confirme que la fonction getProductProperties a été ajoutée à la fin du Product.php d'origine, dans override/classes/

 

Chacune des couleurs a un code ET une texture maintenant.

 

L'image du produit est bien modifiée dans product-list.tpl (j'ai bien un id défini pour celle-ci)

 

J'ai intégré le code suivant dans ce même fichier :

	<div id="attributes_list">
                 {if isset($product.colors) && $product.colors}
				    <p>
					    {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)}'">
								 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
						 </a>
					    {/foreach}
                                    </p>
  	    {/if}

 	</div>

Voici le résultat dans le html : <div id="attributes_list"> </div>

Si je commente le if de ce bout de code, le html donne : <div id="attributes_list"><p>  </p></div>

 

J'ai désactivé le cache dans Performances > Smarty

Pour vider le cache, faut-il faire une autre manipulation? Ou juste refaire un appel de page dans le navigateur?

 

Enfin, je te confirme que l'url rewrite est activé. Je te remercie pour ton aide car cette fonction me parait effectivement incontournable pour les prochaines versions!

 

Bonjour,

 

Et ça ne fonctionne toujours pas ???

 

Il faut ajouter la fonction "getProductProperties" modifiée dans la classe Product, fichier :  "override > classes > Product.php".

 

comme ceci :

<?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 array_merge($row, 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;

		$row['quantity'] = Product::getQuantity(
			(int)$row['id_product'],
			0,
			isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null
		);

		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'] = 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);



// Color Product-list

		$colors = array();
          
		/* Vérifier l id du groupe dans l admin Catalogue > Attributs et Valeurs > dans la liste ex: Couleur l id = 1 */
                $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;

// End Color Product-list





		// 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;

		$row = Product::getTaxesInformations($row, $context);

		self::$producPropertiesCache[$cache_key] = $row;
		return self::$producPropertiesCache[$cache_key];
	}
}
?>

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

 

Remplacez 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}" />

Et placez :

{if isset($product.colors) && $product.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='{$link->getImageLink($product.link_rewrite, $color.id_image)}'">
                <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
           </a>
     {/foreach}
    </p>
  {/if}

Cordialement,

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

En 1.5.6 ca marche mais quand on click sur la couleur l'image ne se change pas et on a un gros point d'interrogation y'a t'il une solution ???

 

merci d'avance 

 

 

Remplacez le code du template par celui-ci !

 

{if isset($product.colors) && $product.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='{$link->getImageLink($product.link_rewrite, $color.id_image)}'">
                                 <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />
                         </a>
                     {/foreach}
                     </p>
             {/if}
Edited by AkrOpad (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Je ne sais pas si mon thème est la raison du problème mais je ne peux faire apparaître les attributs de couleur... J'ai pourtant suivi à la lettre vos indications mais rien n'y fait. Il semble que je n'ai pas de valeur pour $product.colors d'où un vide persistant dans mes listes de produits à cet endroit du html. :blush:

 

J'ai comparé avec product.tpl puisque c'est le seul endroit où apparaissent les images de couleurs. Ce n'est pas du tout la même terminologie. Cette page fait appel a $groups et $group.group_type == 'color' avec un script en haut de code.

 

Dans product-list.tpl, la zone dans {if isset($product.colors) && $product.colors}              {/if} reste malheureusement vide et ne s'affiche pas (même en y insérant un caractère "en dur". La condition n'est donc pas remplie...

 

Voici le code que j'ai dans product.tpl :

{elseif ($group.group_type == 'color')}
			<ul id="color_to_pick_list" class="clearfix">
				{assign var="default_colorpicker" value=""}
					{foreach from=$group.attributes key=id_attribute item=group_attribute}
						<li{if $group.default == $id_attribute} class="selected"{/if}>
							<a id="color_{$id_attribute|intval}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value};" title="{$colors.$id_attribute.name}" onclick="colorPickerClick(this);getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if}">
								{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
									<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$colors.$id_attribute.name}" width="15" height="15" /><br>
								{/if}
							</a>
						</li>
							{if ($group.default == $id_attribute)}
							   {$default_colorpicker = $id_attribute}
							{/if}
					{/foreach}
			</ul>

Je ne sais pas où / comment trouver ce qui cloche!

 

J'ai un module également qui était prévu pour cet affichage mais il affiche aussi les tailles, le tout en ajax mais... le temps de chargement de page est totalement impraticable...

 

Si une bonne âme a une suggestion, une piste, un tuto... Je vous en serais très reconnaissante!

 

Merci d'avance :)

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

 

Je viens de trouver pourquoi je n'avais aucun résultat d'affichage de couleurs avec cette astuce!!! Donc, si ça peut servir à quelqu'un:

mon attribut "Couleur" était bien défini dans mon back office comme un attribut de type Couleur mais, pour une raison que j'ignore, celui-ci était bien en type "Color" dans ma base de données (table ps_attribute_group) mais il y a un 2e champ qui définit la nature de cet attribut "is_color_group" et celui-ci était à "0" au lieu de "1"...

 

:-)

Link to comment
Share on other sites

Bonjour,

 

Je viens de trouver pourquoi je n'avais aucun résultat d'affichage de couleurs avec cette astuce!!! Donc, si ça peut servir à quelqu'un:

mon attribut "Couleur" était bien défini dans mon back office comme un attribut de type Couleur mais, pour une raison que j'ignore, celui-ci était bien en type "Color" dans ma base de données (table ps_attribute_group) mais il y a un 2e champ qui définit la nature de cet attribut "is_color_group" et celui-ci était à "0" au lieu de "1"...

 

:-)

 

 

Ah oui !

 

Dans override/classes/product.php

mettre $groupcolor = 0; au lieu de $groupcolor = 1;
Edited by AkrOpad (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous,

 

Je souhaiterai savoir si cette méthode fonctionne sur prestashop 1.5.6. 

Quelqu'un aurait il l'amabilité de faire un résumé de la procédure, en effet ce sujet contient 7 pages et je suis un peu perdue ! 

 

Merci d'avance,

Link to comment
Share on other sites

Bonjour à tous,

 

Je souhaiterai savoir si cette méthode fonctionne sur prestashop 1.5.6. 

Quelqu'un aurait il l'amabilité de faire un résumé de la procédure, en effet ce sujet contient 7 pages et je suis un peu perdue ! 

 

Merci d'avance,

 

 

Bonjour,

 

http://akropad.com/web-developpement/prestashop-1-5-6-afficher-la-liste-des-couleurs-dans-la-liste-des-produits

 

 

Cordialement,

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour Bonjour, 

 

Tout d'abord je tiens vraiment a te remercier Akropad pour tout le mal que tu t'es donné et pour ta disponibilité, j'ai pas encore mis tout ça en place mais je pense qu'avec ce topic je devrais me débrouiller :) 

 

Juste une question, serait-il possible, à la place des carrés de couleur, d'avoir directement les aperçus produits des différents couleurs clickables et l'image qui se change au survol de chacun? 

 

Si je remplace les couleurs par des images dans les valeurs ça devrait le faire non ?

 

Au final j'adorerais avoir à peu près ce rendu là: http://www.articlesdeparis.com/bijoux-mode-bracelets-c-23_34.html

 

Merci d'avance,

 

Je trouve vraiment que tu fais un super boulot ! Bonne semaine à tous 

Link to comment
Share on other sites

  • 3 months later...

Bonjour,

 

Tout d'aborde merci beaucoup votre info, cela vraiment m'a aidé beaucoup ! :)

 

Du coup j'aimerais savoir si vous connaissez comment on peut afficher les couleur pour les produits accesoires dans la page Produit.

 

Je vous remercie en avance

 

Cordialement

 

Mania

Link to comment
Share on other sites

  • 8 months later...

Bonjour, je ne sais pas si je suis dans le bon topic, mais j'ai un problème avec les déclinaisons (éventuellement un conseil sur un module existant serait tres bien) voila ma problématique:

Sur un PS 1.5.5 j'ai des produits ayants plusieurs déclinaisons, par exemple un fauteuil existe en tissus, simili, et cuirs. Chaque matériaux à une 30ene de textures différentes à afficher. Du coups sur la fiche produit l'affichage est très laid car entre lest différentes couleurs, grains, etc de chaque textures il y a 70 à 80 imagettes carres sur la droite.

 

Je voudrais un système permettant un 1er choix de la matière, qui ouvrirai le choix de ces texture par exemple, dans un déroulant je choisi cuir parmi "tissus, simili, cuir," et là j'ai les texture cuis uniquement qui s'affichent. Ou ya un scroller latéral sur les 3 (ou plus) matériaux "tissus, simili, cuir," n'affichant les imagette de textures que sur 3 lignes.

 

Quelqu'un à une idée?

D'avance merci.

Link to comment
Share on other sites

  • 4 months later...

Bonjour,

 

Dans la liste des produits, j'aimerais exclure un attribut qui est de type couleur.

En effet, mes produits possèdent plusieurs attributs de type couleur et j'aimerais afficher les couleurs d'un seul ID...

Merci d'avance pour vos réponses.

PS: je suis sous Prestashop v1.6.0.9

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