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.