Jump to content

[RESOLU] Nom de la catégorie dans le listing produits et condition d'affichage


Recommended Posts

Bonjour,

 

Je suis en train de faire des modifications dans le code de :

/themes/[mon_theme]/product-list.tpl

 

Pour rajouter, en-dessous de la description courte, le nom de la catégorie. Si l'on ne met pas de conditions, le nom de la catégorie devrait s'afficher dans tous les cas :

 

- listing produits dans chaque catégories

- listing produits réductions et meilleurs ventes

 

J'aimerais par la suite ne l'afficher que dans les pages "réductions" et "meilleurs ventes"

Je teste avec le code suivant :

 

...

{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>

<!-- Ajout de l'affichage de la catégorie -->

<br />

<h4>{$category->name}</h4>

<br />

{$product.category}

<!-- FIN -->

</div>

...

 

Avec $category->name, j'ai bien le nom correct complet. Avec $product.category, j'ai le nom "URL simplifiée" avec les mots séparés par un tiret. Voyez par exemple le résultat ici :

 

http://photo-gravure...?id_category=24

 

Mon problème est que dans le cas des "réductions" et "meilleurs ventes", $category->name ne fonctionne pas, rien ne s'affiche ($product.category par contre s'affiche bien) :

 

http://photo-gravure...prices-drop.php

http://photo-gravure.../best-sales.php

 

Je n'arrive pas à trouver pourquoi il ne s'affiche pas... Auriez-vous une idée?

De plus, je ne sais pas trop comment faire le test pour afficher seulement si l'on est sur les pages "réductions" et "meilleurs ventes". Si vous avez une idée là-dessus, n'hésitez pas

 

Merci beaucoup pour votre aide

Link to comment
Share on other sites

Bonjour.

 

Le soucis est que les pages Meilleurs ventes et Promotions ont leur propre controlleur. Ils ne se basent pas sur le CategoryController. De ce fait, vous n'avez pas accès à la classe Category.

 

Néanmoins, j'ai une question : vous souhaitez afficher quelle catégorie ? Car un produit peut se trouver dans plusieurs catégories ("Accueil" et "Avec photo" par exemple).

 

Chaque produit possède une variable nommée "id_category_default". Ce que vous pouvez faire, c'est surcharger le tableau qui est créé et envoyé à SMARTY de tel sorte que vous rajoutez une variable name_category et vous utiliserez la fonction Category::getCategoryInformations(ids_category). Attention, le paramètre a envoyer est un tableau, donc : array($id_category_default).

Link to comment
Share on other sites

Merci pour votre réponse.

 

Effectivement dans mon cas, il se peut que certains produits soit aussi dans la catégorie "Accueil" (produits phares)

Je ne souhaite pas afficher "Accueil" mais l'autre catégorie. Dans mon cas il n'y en a pas plus que 2

 

Étant assez novice, j'ai un peu de mal à saisir la modification que vous proposez avec la surcharge du tableau. Dans quel fichier effectuer cette modification?

Link to comment
Share on other sites

Concernant les catégories, vous devez impérativement indiquer la catégorie par défaut de vos produits pour ce que vous souhaitez faire. Cela implique donc de faire attention que dans la fiche de votre produit, via l'administration, la catégorie par défaut ne soit pas "Accueil".

 

Ensuite, pour votre demande, il faut aller dans les controlleurs /controllers/BestSalesController.php et /controllers/PricesDropController.php.

 

Le tableau des produits est construit dans la fonction process(). Il faudrait donc déjà les mettre dans une variable, car actuellement elles sont directement assignées à SMARTY et vous ne pourrez donc pas les modifier. Par exemple, pour les Meilleurs ventes :

 

$products = Product::getPricesDrop((int)(self::$cookie->id_lang), (int)($this->p) - 1, (int)($this->n), false, $this->orderBy, $this->orderWay)

 

et vous assignez à "products" la variable $products. Une fois fait, vous pouvez modifier le tableau. Il suffit de faire un foreach dessus et d'y rajouter vos données :

 

foreach ($products AS $key => $product)
 {
  $name = Category::getCategoryInformations(array($product['id_category_default']));
  $products[$key]['name_category'] = $name['name'];
 }

 

J'ai codé rapidement, à vous de régler les erreurs possibles et de faire la même chose pour les Promotions.

Link to comment
Share on other sites

Il semble que dans ma version, la modification se fait bien dans prices-drop.php

 

Je fais comme vous dites, je met la récupération de la liste des produits dans une variable, je modifie l'assignation tel que décrit. Puis je passe au foreach.

 

Tout ça fonctionne bien car si je met uniquement dans la boucle

 

$products[$key]['name_category'] = "Num cat : " . $product['id_category_default'];

 

depuis /themes/[mon_theme]/product-list.tpl j'ai accès à la variable {$product.name_category} et elle s'affiche correctement.

 

Maintenant mon problème est pour récupérer le nom de la catégorie, car

 

$name = Category::getCategoryInformations(array($product['id_category_default']));

 

Ne fonctionne pas, et me renvoi une erreur de fonction non définie

J'essaye de passer par un :

 

$category = new Category(intval(Tools::getValue($product['id_category_default'])), intval($cookie->id_lang));
$products[$key]['name_category'] = $category->name;

 

(en copiant un peu sur category.php) Mais ça ne fonctionne pas :(

Link to comment
Share on other sites

Petit complément, par rapport à ma 2ème demande sur les conditions d'affichage

Dans product-list.tpl, si l'on veut tester sur quelle page on est pour afficher ou non quelque chose, dans mon cas tester si l'on est sur "réductions" ou "meilleures ventes" :

 

{if $page_name == "prices-drop"} ou {if $page_name == "best-sales"}

Link to comment
Share on other sites

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