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 ?

oscarpas
la source

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

Bilal Usean
la source
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

Rafael Corrêa Gomes
la source
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); 
}
Zeeshan Khuwaja
la source
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.

SYPOMark
la source
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;
}

?>
Teja Bhagavan Kollepara
la source