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 ?

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


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


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

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á.


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

?>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.