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.