Magento 2: come visualizzare gli attributi personalizzati nel catalogo?


13

Ho creato un nuovo attributo del campo di testo, con le seguenti impostazioni impostate su yes:

Visible on Catalog Pages on Storefront
Used in Product Listing

L'attributo viene assegnato a un set di attributi e viene visualizzato nella vista del prodotto come previsto.

Tuttavia non è visibile nella vista del catalogo, sto usando il tema Luma predefinito e ho cancellato la cache e reindicizzato. Se visualizzo il file modello:

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

Non riesco a trovare alcun codice che ottenga attributi personalizzati, quindi il tema Luma non sembra supportarlo per impostazione predefinita.

Come posso ottenere un'etichetta e un valore dell'attributo personalizzato dei prodotti in list.phtml ?

Risposte:


22

Possiamo ottenere un valore di attributo personalizzato come di seguito

Valore attributo

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

Etichetta

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

Nota: nella riga sopra c_address è il mio codice di attributo personalizzato.

Riferimento: Magento/Catalog/templates/product/view/attribute.phtml


non funziona se l'attributo è un media imagetipo.
— LucScu,

@Bilal, per me gli attributi personalizzati mostrano "errore irreversibile getFrontend" in list.phtml. puoi dire per favore come evitare questo errore per favore se hai qualche idea
— Hitesh Balpande

11

Ho creato un articolo su questo, che ha solo 5 passaggi per farlo:

1 - Crea il tuo attributo in Negozi> Attributi> Prodotto .

2 - Imposta l'attributo nel gruppo Predefinito, vai su Negozi> Attributi> Set di attributi .

3 - Imposta i valori di questi attributi nei tuoi prodotti.

4 - Apri nel tuo tema personalizzato il relativo file qui sotto:

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

5 - Tra la funzione foreach incollare questo codice di seguito, ma modificando il codice dell'attributo corretto:

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

if ($_getMyAttr){

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

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

Importante

Assicurati che le opzioni "Visibile nella pagina di visualizzazione del prodotto sul front-end" e "Utilizzato nell'elenco dei prodotti" in Proprietà dello storefront siano impostate su Sì.

Riferimento: https://rafaelstz.github.io/magento/magento2-display-custom-attribute-catalog-list-products.html


Con l' media imageattributo "Visibile nella pagina di visualizzazione del prodotto sul front-end" e "Utilizzato nell'elenco dei prodotti" non sono impostabili.
— LucScu,

lo stesso per l'attributo price
— CompactCode

dove posso trovare l'elenco predefinito.phtml?
— mikebertiean,

ciao, l'etichetta dell'attributo funziona per me ma non il valore dell'attributo
— Sarvesh Tiwari,

6

Usa questo

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

1

@mikebertiean Per trovare la lista predefinita, vai su

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

Dopo averlo copiato, modificato e aggiunto al percorso menzionato da Rafael, dovresti semplicemente svuotare la cache e funzionerà.


0

Aperto

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

Aggiungi quanto segue tra foreach loop.

<?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;
}

?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.