Magento 2: Comment afficher un attribut personnalisé dans le catalogue?


13

J'ai créé un nouvel attribut de champ de texte, avec les paramètres suivants définis sur oui:

Visible on Catalog Pages on Storefront
Used in Product Listing

L'attribut est affecté à un ensemble d'attributs et il apparaît dans la vue du produit comme prévu.

Cependant, il n'est pas visible dans la vue du catalogue, j'utilise le thème Luma par défaut et j'ai effacé le cache et réindexé. Si je consulte le fichier modèle:

magento-catalog/view/frontend/templates/product/list.phtml

Je ne trouve aucun code obtenant des attributs personnalisés, donc le thème Luma ne semble pas le supporter par défaut.

Comment puis-je obtenir une étiquette et une valeur d'attribut personnalisé de produits dans list.phtml ?

Réponses:


22

Nous pouvons obtenir une valeur d'attribut personnalisée comme ci-dessous

Valeur d'attribut

<?php /* @escapeNotVerified */ echo $_product->getResource()->getAttribute('c_address')->getFrontend()->getValue($_product); ?>

Étiquette

$address =$_product->getResource()->getAttribute('c_address')->getStoreLabel();

Remarque: dans la ligne ci-dessus, c_address est mon code d'attribut personnalisé.

Référence: Magento/Catalog/templates/product/view/attribute.phtml


cela ne fonctionne pas si l'attribut est un media imagetype.
LucScu

@Bilal, pour moi, les attributs personnalisés affichent "erreur fatale getFrontend" dans list.phtml. pouvez-vous dire s'il vous plaît comment éviter cette erreur s'il vous plaît si vous avez une idée
Hitesh Balpande

11

J'ai créé un article à ce sujet, qui n'a que 5 étapes pour le faire:

1 - Créez votre attribut dans Boutiques> Attributs> Produit .

2 - Définissez l'attribut dans le groupe Par défaut, accédez à Magasins> Attributs> Ensemble d'attributs .

3 - Définissez les valeurs de ces attributs dans vos produits.

4 - Ouvrez dans votre thème personnalisé le fichier relatif ci-dessous:

app/design/frontend/CUSTOM/THEME/Magento_Catalog/templates/product/list.phtml

5 - Entre la fonction foreach collez ce code ci-dessous, mais changez le code de votre attribut correct:

$_getMyAttr = $_product->getResource()->getAttribute('my_attribute');

if ($_getMyAttr){

    // Get Value
    $attrTestValue = $_getMyAttr->getFrontend()->getValue($_product);

    // Get Label
    $attrTestLabel = $_getMyAttr->getStoreLabel();
}

Important

Assurez-vous que les options «Visible sur la page d'affichage du produit sur le front-end» et «Utilisé dans la liste des produits» sous Propriétés de la boutique sont définies sur Oui.

Référence: https://rafaelstz.github.io/magento/magento2-display-custom-attribute-catalog-list-products.html


Les media imageattributs "Visible sur la page de visualisation du produit sur le front-end" et "Utilisé dans la liste des produits" ne sont pas paramétrables.
LucScu

idem pour l'attribut de prix
CompactCode

où puis-je trouver le list.phtml par défaut?
mikebertiean

bonjour, l'étiquette d'attribut fonctionne pour moi mais pas la valeur d'attribut
Sarvesh Tiwari

6

Utilisez ceci

$attribute = $_product->getResource()->getAttribute('identifier'); 
if ($attribute) 
{ 
$attr_value = $attribute ->getFrontend()->getValue($_product); 
}

1

@mikebertiean Pour trouver le fichier list.phtml par défaut, accédez à

<Magento base>/vendor/magento/module-catalog/view/frontend/templates/product

Une fois que vous l'avez copié, modifié et ajouté au chemin mentionné par Rafael, vous devez simplement vider votre cache et cela fonctionnera.


0

Ouvert

app/design/frontend/CUSTOM/THEME/Magento_Catalog/templates/product/list.phtml

Ajoutez ce qui suit entre chaque boucle.

<?php

$brand_attribute = $_product->getResource()->getAttribute('brand');

if ($brand_attribute){

    // Get Value
    $brand_value = $brand_attribute->getFrontend()->getValue($_product);

    // Get Label
    $brand_lable = $brand_attribute->getStoreLabel();
    echo $brand_lable." : ".$brand_value;
}

?>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.