Magento 2: ¿Cómo mostrar un atributo personalizado en el catálogo?

13

He creado un nuevo atributo de campo de texto, con la siguiente configuración establecida en yes:

Visible on Catalog Pages on Storefront
Used in Product Listing

El atributo se asigna a un conjunto de atributos y se muestra en la vista del producto según lo previsto.

Sin embargo, no es visible en la vista de catálogo, estoy usando el tema predeterminado de Luma y borré el caché y lo volví a indexar. Si veo el archivo de plantilla:

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

No puedo encontrar ningún código que obtenga atributos personalizados, por lo que el tema Luma no parece admitir esto de forma predeterminada.

¿Cómo puedo obtener una etiqueta y un valor de atributo personalizado de productos en list.phtml ?

oscarpas
fuente

Respuestas:

22

Podemos obtener un valor de atributo personalizado como a continuación

Valor de atributo

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

Etiqueta

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

Nota: en la línea anterior c_address es mi código de atributo personalizado.

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

Bilal Usean
fuente
no funciona si el atributo es un media imagetipo.
LucScu
@Bilal, para mí los atributos personalizados muestran "error fatal getFrontend" en list.phtml. ¿Puedes decir por favor cómo evitar este error si tienes alguna idea?
Hitesh Balpande
11

Creé un artículo sobre esto, que solo tiene 5 pasos para hacerlo:

1 - Cree su atributo en Tiendas> Atributos> Producto .

2 - Establezca el atributo en el grupo Predeterminado, vaya a Tiendas> Atributos> Conjunto de atributos .

3 - Establezca los valores de estos atributos en sus productos.

4 - Abra en su tema personalizado el archivo relativo a continuación:

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

5 - Entre la función foreach pegue este código a continuación, pero cambiando el código de su atributo correcto:

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

if ($_getMyAttr){

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

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

Importante

Asegúrese de que las opciones "Visible en la página de visualización del producto en el front-end" y "Usado en la lista de productos" en Propiedades de escaparate estén configuradas en Sí.

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

Rafael Corrêa Gomes
fuente
Con el media imageatributo "Visible en la página de visualización del producto en el front-end" y "Usado en la lista de productos" no se pueden configurar.
LucScu
igual para el atributo de precio
CompactCode
¿Dónde puedo encontrar el list.phtml predeterminado?
mikebertiean
hola, la etiqueta de atributo funciona para mí pero no el valor de atributo
Sarvesh Tiwari
6

Utilizar esta

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

@mikebertiean Para encontrar el list.phtml predeterminado, vaya a

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

Una vez que lo haya copiado y alterado y lo haya agregado a la ruta que mencionó Rafael, solo debe limpiar su caché y funcionará.

SYPOMark
fuente
0

Abierto

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

Agregue lo siguiente entre el bucle foreach.

<?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
fuente