Affichage des attributs et des libellés sous Magento

Dans: Magento

17 nov 2009

Pour afficher des attributs spécifiques sous Magento, soit on met l’attribut « visible » en back-office pour qu’il s’affiche dans le tableau de la fiche produit, soit on écrit dans le template list.phtml.

  1. Afficher les attributs avec une zone de texte
  2. Afficher les attributs avec une liste déroulante
  3. Afficher les attributs avec une sélection multiple
  4. Afficher le libellé des attributs
    1. Libellé Admin de l’attribut
    2. Libellé Front de l’attribut
  5. Autres
    1. Afficher les attributs avec une méthode « passe partout »
    2. Afficher les attributs avec une liste déroulante dans un listing de catégorie n’ayant pas chargé l’attribut
    3. Listing de différentes méthodes passe-partout

Etape 1 : Afficher les attributs avec une zone de texte

Vous pouvez donc afficher la référence du produit à l’endroit voulu.

$_product->getData('sku')

Etape 2 : Afficher les attributs avec une liste déroulante

Instruction pratique pour afficher les attributs ayant une liste déroulante comme les fabricants par exemple.

$_product->getAttributeText('manufacturer')

Etape 3 : Afficher les attributs avec une sélection multiple

Confronté récemment à un attribut ayant une sélection multiple (pour des labels biologiques par exemple), il faut effectuer une boucle sur l’attribut :

<?php foreach($_product->getAttributeText('attribute_id') as $label): ?>
<?php echo $label ?>
<?php endforeach ?>

Etape 4 : Afficher le libellé des attributs

Dans l’administration, un attribut est composé de son code, de sa valeur admin, et de ses valeurs de front suivant la vue (et donc normalement suivant la langue). Pour les exemples suivant :

  • Code : short_description
  • Admin : Mini Description
  • Front (defaut fr) : Description courte
  • Front (eng) : Short Description

Cette instruction permet d’afficher le titre (le libellé) de l’attribut depuis la fiche produit

1) Libellé Admin de l’attribut

Mini description :

$_product->getResource()
				->getAttribute('short_description')
				->getFrontend()
				->getLabel($_product)

2) Libellé Front de l’attribut

Affiche : Description courte (ou Short Description si la vue est en anglais)

$_product->getResource()
				->getAttribute('short_description')
				->getStoreLabel()

Depuis n’importe où :

Mage::getModel('eav/config')
			->getAttribute('catalog_product', 'attribute_id')
			// pour le libellé Admin
			->getFrontend()->getLabel()
			// pour le libellé Front
			->getStoreLabel()

Etape 5 : Autres

1) Afficher les attributs simples avec une méthode « passe partout »

Voici une instruction permettant aussi d’afficher un attribut simple

$_product->getResource()
				->getAttribute('club_type')
				->getFrontend()
				->getValue($_product)

2) Afficher les attributs avec une liste déroulante dans un listing de catégorie n’ayant pas chargé l’attribut

Pour afficher des stickers (-10% / -20% / …) dans les listings des produits, je me sers de cette méthode beaucoup plus propre pour afficher les attributs personnels (ou en liste déroulante) dans cet article.

3) Listing de différentes méthodes passe-partout

Pour compléter cet article, voici un lien assez intéressant permettant d’afficher tous les attributs automatiquement, etc.

16 Commentaires pour Affichage des attributs et des libellés sous Magento

Avatar

solidesnakerz

décembre 15th, 2009 à 19 h 23 min

Super Merci ! Le gros coup de pouce de la journée.

En revanche peux t-on récupérer un attribut images de l’image gallery pour afficher le logo d’une marque par exemple.

Merci d’avance!

Avatar

Bachir

janvier 12th, 2010 à 18 h 29 min

Salut,
est-ce que quelqu’un a une réponse à ça…? c’est-à dire pour afficher le logo d’une marque.

merci

Avatar

Frédéric Martinez

janvier 15th, 2010 à 1 h 39 min

@solidesnakerz & @Bachir :

L’attribut « Marque » (manufacturer) n’est composé que d’un libellé ainsi que de sa valeur. Il est impossible en l’état de rajouter une image.

3 solutions :

1) La solution la plus facile est de créer une nouvelle arborescence de catégories et de la nommer « Marques », vous pouvez ainsi ajouter simplement vos images. Du développement concernant l’affichage de vos nouvelles catégories est à prévoir.

2) Ajout les images à l’attribut « Manufacturer » :

=> Du développement (long) ou un module à installer (j’ai l’ai déjà vu passé sur un site Magento. Je ne sais plus s’il était payant)

3) Chaque valeur de marque est un nom du fichier image. Et votre template ira chercher l’image dans le dossier de votre choix. Problème : il faut ajouter/modifier/supprimer via FTP. Solution hyper facile à mettre en place cependant.

Avatar

William

février 10th, 2010 à 12 h 00 min

Bonjour tout le monde,

J’espere sincèrement trouver une réponse au problème que je rencontre.
J’ai mis en place hier l’affichage de stickers (-10% / -20% / …) dans les listings des produits.
La méthode devant permettre de récupérer la valeur de l’option courante sur un produit de se fait pas.
Il s’agit de la méthode suivante :

$_product->getAttributeTex('promonew')

Pour ce code attribut « promonew » dont le titre ou libellé est « badge », j’ai deux options. Pour chaque produit, je peux avoir une ou option sélectionnée ou aucune. Mais impossible de récupérer donc la valeur courante de l’option.

Tout ce que je parvient à récupérer c’est le libellé (titre de l’attribut) via la methode :

$_product->getResource()->getAttribute('conseil_utilisation')->getFrontend()->getLabel($_product)

J’ai également essayé avec cette méthode :

$_product->getResource()->getAttribute('club_type')->getFrontend()->getValue($_product)

mais cela ne donne rien non plus.

Y aurait il parmis vous une personne qui serait en mesure de m’aider?

En vous remerciant par avance.

William

Avatar

Frédéric Martinez

février 10th, 2010 à 12 h 13 min

Bonjour William,

1) Il me semble que vous vous êtes trompés dans le nom de la méthode :

$_product>getAttributeText('promonew')

et Non :

$_product->getAttributeTex('promonew')

2) Pour les choix multiples, il faut boucler sur votre attribut. Commencez par dumper votre variable. Ensuite vous n’avez plus qu’à poser un foreach pour parcourir son contenu.

Avatar

Julien

mars 27th, 2010 à 18 h 50 min

bonjour, dans la liste de produit d’une catégoriesur mon site je voudrais bien faire aparaitre la pastille de stock, comme dans la fiche d’un produit j’ai réussi a afficher le le nom de l’attribu stockcouleur mais pas la pastille de couleur qui va avec la reponse de a liste déroulante.

je vous remercie.

Avatar

Frédéric Martinez

mars 28th, 2010 à 17 h 46 min

Comme dans l’article que j’ai cité, regardez la fin du tutoriel, il faut faire une balise span avec comme classe la valeur de votre attribut. Ensuite en CSS, vous affichez votre vignette.

Avatar

Terzi

mai 5th, 2010 à 14 h 28 min

Bonjour,
Déjà Merci pour votre blog, je n’arrive pas à afficher des options de mon attribut d’un produit configurable sur le listage des produits « list.phtml »

Le code ci-dessous ne me renvois rien :

getAttributeText('manufacturer')

J’ai du loupé quelque chose ? des idées ?

En vous remerciant par avance.

SebTerzi

Avatar

cocobello

mai 17th, 2010 à 13 h 44 min

Bonjour,
Je fais des bijoux à graver.
est-ce qu’il est possible de mettre un attribut : avec gravure/sans gravure. en dessous une case vide avec le texte à graver?!?
Je cherche dans tous les guides et forum, toujours pas trouver comment faire pour la case à remplir par le client….
Merci si vous avez une idée!

Avatar

Frédéric Martinez

mai 17th, 2010 à 13 h 51 min

Bonjour,

Pour rajouter un champ personnalisé (pour le client), il faut ajouter une « Option Personnalisable » (dernier onglet de la sidebar de gauche dans une fiche produit en back-office).

A partir de là, vous pouvez restreindre la saisie (champ / textarea / coût supplémentaire / etc…)

Bonne continuation.

Frédéric.

Avatar

cocobello

mai 20th, 2010 à 14 h 31 min

Rebonjour,

où configure-t-on « contactez-nous » sur Magento.
J’ai rentré mes adresses mails dans Système configuration, « adresse mail du magasin » et , « contacts ».
Mais quand j’envoie un mail, voilà la réponse… »Impossible d’envoyer votre demande. Veuillez réessayer plus tard. »
Faut-il rentrer quelquechose dans avancé, système, « serveur »?
Merci beaucoup.
Nathalie

Avatar

crowker

septembre 2nd, 2010 à 17 h 34 min

Bonjour,

J’essaie de mettre en oeuvre la solution évoquée en étape 3 pour la mise en place de labels bio dans un site de vente de paniers…

J’en profite pour afficher une image du/des labels choisis dans la liste déroulante et stockées dans un répertoire avec le même nom que celui stocké en valeur de mon attribut.

<?php foreach($_product->getAttributeText('attribute_id') as $label): ?>
<?php echo $label ?>
<?php endforeach ?>

Si le code fonctionne parfaitement quand j’effectue une sélection multiple, elle n’affiche plus rien si j’effectue une sélection simple… dois-je tester le nombre de résultats et afficher l’étape 2 en cas de solution unique ?

Merci de votre aide.

Frédéric

Avatar

cobb

novembre 22nd, 2010 à 18 h 33 min

Bonjour,

Merci pour ces infos. Comment faire pour gérer le multilangue ?
Par exemple, j’aimerai récupérer le libellé d’un attribut, ainsi que toutes ses valeurs possibles (c’est une liste déroulante), tout en utilisant les trads du back office.

J’ai trouvé un bout de code sur le site que vous citez, mais il ne fonctionne que dans l’affichage produit, alors que j »en aurai besoin à partir de n’importe où.

Une idée ? Merci d’avance !

Avatar

dejonghe

avril 14th, 2011 à 0 h 06 min

Bonjour,
je cherche a récupérer le code de l’attribut pour m’en servir comme classe dans une liste d’attribut
Savez vous si c’est faisable ?
merci d’avance

Avatar

Tibo

juin 23rd, 2011 à 18 h 02 min

Bonjour,

J’ai cru que le « getStoreLabel() » de votre point 4 allez répondre à ma question, mais non…
En fait je cherche à récupérer la « Value » front de mon attribut qui a une valeur « admin » une autre « french » une autre « english » etc… J’arrive sans souci à remonter la valeur « Admin », mais ensuite impossible d’afficher la valeur dans la langue de mon choix…. une idée ? J’avoue que là, je sèche !

Avatar

Frédéric Martinez

janvier 4th, 2012 à 20 h 56 min

@crowker : En effet, un selection multiple et simple ne fait pas pareil, et du coup il faut tester pour ne pas utiliser le forearch

@cobb : je ne l’ai pas sous la main, mais il faut rajouter le storeId afin de sélectionner que les valeurs du store voulu

@dejonghe : Oui c’est faisable avec un getAttributeCode()

@Tibo : Idem que cobb en fait, il faut choisir sa portée

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]