Jump to content

Affichage des couleurs lors de l'affichage de la liste de produits.


Recommended Posts

bonjour,

dans le fichier product.tpl, l'affichage des couleurs est géré par la liste suivante :

> 
</pre>
<ul>
           {foreach from=$colors key='id_attribute' item='color'}
{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}{/if}
           {/foreach}
</ul>



si tu copies ce code au bon endroit dans product-list.tpl ça marche ou pas ? après il y aura peut-être un problème de variable je sais pas mais essaie déjà ça.

Link to comment
Share on other sites

c'est bizarre pq avec Fireburg en regardant sur le site en exemple c'est cette liste qui a été copiée. peut-être un problème de variable le mieux pour voir les variables en jeu c'est de rajouter {debug} dans ton fichier tpl.

sinon le plus simple est de contacter le site ils devraient te renseigner !

Link to comment
Share on other sites

  • 1 month later...

Dsl pour le manque de réactivité.
Je n'ai pas retesté mon code, mais en gros voila ce que j'ai fais :

dans le thème, product-list.tpl

{if !empty($product.colors)}


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

   {/foreach}

{/if}



A la racine, dans category.php (ou autre page de listage) avant $smarty->assign() ligne 62:

/* couleurs */
       foreach ($cat_products as $key => $cat_product) {
   $product = new Product(intval($cat_product['id_product']), true, intval($cookie->id_lang));
   $colors = array();
   $attributesGroups = $product->getAttributesGroups(intval($cookie->id_lang));
   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;
}



Voila, je pense que ça doit répondre à votre question.
a+
Damien

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

Bonjour,

Un petit up sur ce post.

En insérant le code de Damien, pas de message d'erreur, mais pas d'affichage des couleurs non plus... Il y avait peut-être une petite modif à effectuer ?
Quelqu'un a réussi à afficher les couleurs dans la liste des produits ?

Merci d'avance.

Link to comment
Share on other sites

Bonjour,

Je cherche à afficher les couleurs dispo pour les produits dans la liste. En suivant les indications de Daxey, il ne se passe rien...

Dans product_list.tpl

{if !empty($product.colors)}


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

   {/foreach}

{/if} 



Dans category.php

/* couleurs */
       foreach ($cat_products as $key => $cat_product) {
   $product = new Product(intval($cat_product['id_product']), true, intval($cookie->id_lang));
   $colors = array();
   $attributesGroups = $product->getAttributesGroups(intval($cookie->id_lang));
   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;
}



lhweb semblait avoir réussi. Pourtant il doit manquer quelque chose pour que ça fonctionne (je ne sais pas assigner les variables à SMARTY).

Pierre

Link to comment
Share on other sites

Bonjour,

quelle version de prestashop utilise tu ?

De mon côté j'ai juste copié le code dans category.php à l'endroit indiqué ce qui a pour effet de créer les variables dont on a besoin
rajoutes dans product-list.tpl de ton template {debug} pour afficher les variables chargées et vérifies que tu y trouves bien les déclinaisons de couleurs

ensuite j'ai légèrement modifié le code à placer dans product-list.tpl mais j'ai gardé les variables telles quelles et ca a fonctionné :)

vérifie aussi si par hasard tu as coché qu'il s'agit de déclinaisons de couleurs dans la fiche d'édition du produit dans le BO, peut être qu'il faut l'activer pour avoir les variables je n'ai pas le code sous le nez :)

Link to comment
Share on other sites

Bonjour,

Merci de me répondre.

J'avais déjà essayé {debug}; je l'ai refait pour être sûr.

Aucune déclinaison de couleur dans les variables chargées :-(
Dans le BO j'ai bien défini les déclinaisons comme étant des couleurs; d'ailleurs j'ai le color picker dans la fiche produit... Mais dans la liste, rien !

Tout ça est très frustrant.

A+

Link to comment
Share on other sites

très étrange

tu as modifié quel fichier category.php ? (il y en a un a la racine de prestahop et un dans le dossier classes, c'est celui de la racine qu'il faut modifier :) )

tes couleurs sont bien des attributs ?

pour le debug si tu as associé un code couleur aux attributs (ex: #000000) tu peux t'en servir pour faire une recherche dans la fenetre de debug histoir d'etre sur que ces variables de sont pas chargées

vérifie sur plusieurs pages de ton catalogue car cette solution ne fonctionne pas pour la homepage (il faut modifier le module homefeatured et je n'ai pas réussi non plus)

sinon je suis désolé mais je ne vois pas du tout, chez moi ca a marché direct :)

Link to comment
Share on other sites

Voilà, j'ai trouvé :

Il existe 2 instructions $smarty->assign dans category.php. Je n'en avais vu qu'une et placé le code entre les deux !!!

Tu as raison, cela fonctionne immédiatement. Je suis désolé de t'avoir fait perdre ton temps.

Merci de ton aide (utile car j'allais abandonner...)

A+

Link to comment
Share on other sites

  • 5 months later...

Bonjour,

Pensez-vous qu'il soit possible de faire la même chose avec un attribut autre que la couleur (1 seul groupe) ?
Je pensais commencer par ajouter un truc du genre dans le product-list.tpl:

     {foreach from=$groups key=id_attribute_group item=group}


{$group.name|escape:'htmlall':'UTF-8'} :
          {assign var='groupName' value='group_'|cat:$id_attribute_group}
0}$('#resetImages').show('slow');{/if}">
           {foreach from=$group.attributes key=id_attribute item=group_attribute}
{$group_attribute|escape:'htmlall':'UTF-8'}
            {/foreach}


       {/foreach}



Merci de votre aide

Link to comment
Share on other sites

  • 1 month later...

J'ai suivi toutes les étapes ci-dessus avec vous la réussite! Qu'est-ce qui se passe réellement pas les produits sont affichés ... Je suis tellement désespérée d'avoir ce travail peut-on aider S'IL VOUS PLAÎT!

Excusez mon français!


**I've followed the above steps with you success!!! What actually happens is no products are displayed... I am so desperate to have this work could anyone help PLEASE!!!

Excuse my French!**

Link to comment
Share on other sites

  • 4 weeks later...

Faites attention aux classes CSS :





ici il va chercher le CSS :

#primary_block a.color_pick {
   width: 20px;
   height: 20px;
   float: left;
   border: 1px solid #666;
   margin: 0 0.5em 0 0;
   cursor: pointer;
}
#primary_block a.color_pick:hover {
   border: 1px solid #000;
}



Mais dans la liste de catégorie on est pas sous #primary_block

il faut rajouter dans le CSS :

a.color_pick {
   width: 20px;
   height: 20px;
   float: left;
   border: 1px solid #666;
   margin: 0 0.5em 0 0;
   cursor: pointer;
}
a.color_pick:hover {
   border: 1px solid #000;
}



Le lien est faux aussi :

J'ai remplacé le lien par le lien vers le produit, peu importe la couleur :
il faut mettre ce code dans A HREF :

{$product.link|escape:'htmlall':'UTF-8'}

Link to comment
Share on other sites

  • 2 months later...

Je me réponds à moi même, pour ceux que ça intéresserait.
Il suffit de mettre (ici j'ai mis une condition pour afficher le nombre de couleurs uniquement s'il y en a plus de deux, avec un seul colori l'info n'ayant pas trop d'intérêt)


{if !empty($product.colors) && $product.colors|@count>1 }

Produit disponible en {$product.colors|@count} coloris
{/if}




Voilou.
Merci pour ce post qui m'a bien aidé.

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

Bonjour,

J'ai appliqué la solution de Legastronome et ça fonctionne. Le seul hic c'est que ça n'affiche que les couleurs codifiés. ex: noir #000000 ou blanc #ffffff
J'ai créée des coloris avec des images et sur ma liste de produits ça s'affiche en noir. Un coup de pouce serait le bienvenue. Je pense qu'il doit exister une variable a appeler en cas de création de couleur en remplacement du code couleur.

merci

Link to comment
Share on other sites

  • 1 month later...
  • 5 months later...
  • 4 months later...
  • 1 month later...

avec un peu de recherche, on retrouve le module Color picker in product list ici:

http://addons.prestashop.com/fr/fonctionnalites-front-office/2728-color-picker-in-product-list.html

 

Pour ceux qui veulent pas s'embêter, c'est la solution, mais pour ceux qui trouve que 30 €, c'est un peu cher pour une dizaine de lignes de codes, la modif est la suivante:

(j'ai traduit l'astuce depuis ce post: http://www.prestashop.com/forums/index.php?/topic/81210-colors-on-product-listtpl/page__view__findpost__p__713824

 

1. Dans controllers/CategoryController.php ajouter vers la ligne 132, juste avant self::$smarty->assign(array( :

foreach ( $this->cat_products as $key => $cat_product ) {

$product = new Product ( intval ( $cat_product[ 'id_product' ] ), true , intval ( self::$cookie -> id_lang ));

$colors = array();

$attributesGroups = $product->getAttributesGroups((int)(self::$cookie->id_lang));

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

}

}

}

$this->cat_products[$key][ 'colors' ] = $colors ;

}

 

2. Ajouter dans le product-list.tpl de votre theme ou vous voulez. ( je l'ai fait autour de la ligne 38, juste après la description de produit.)

 

{if !empty($product.colors)}

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

<span class="color_picker" style="background: {$color.value};" title="{$color.name}"></span>

{/foreach}

{/if}

 

3. Ajoutez dans votretheme/css/product_list.css :

 

#product_list .color_picker {

display: block;

float: left;

width: 10px;

height: 10px;

margin: 5px 2px 5px 2px;

cursor: pointer;

border: 1px solid #D0D3D8;

}

et voilà...

Link to comment
Share on other sites

en fait, il vaut mieux suivre le post un peu plus loin : http://www.prestashop.com/forums/index.php?/topic/81210-colors-on-product-listtpl/page__view__findpost__p__761965

qui recommande de plutôt utiliser l'override. J'ai essayé avec succès...

cela consiste à remplacer l'étape 1 du post précédent par ajouter dans le fichier override/classes/Product.php (le créer s'il n'existe pas ):

<?php

class Product extends ProductCore

{

public static function getProductsProperties($id_lang, $query_result)

{

$products = parent::getProductsProperties($id_lang, $query_result);

foreach ( $products as &$cat_product ) {

$product = new Product ( intval ( $cat_product[ 'id_product' ] ), true , intval ($id_lang));

$colors = array();

$attributesGroups = $product->getAttributesGroups((int)($id_lang));

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' ] =(( !empty($row[ 'id_image' ]) ) ? intval ( $row[ 'id_image' ] ) : - 1 );

}

}

}

$cat_product[ 'colors' ] = $colors ;

}

return $products;

}

}

Link to comment
Share on other sites

  • 1 month later...
  • 1 year later...

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