Magento 2: Como exibir atributo personalizado no catálogo?


13

Eu criei um novo atributo de campo de texto, com as seguintes configurações definidas como yes:

Visible on Catalog Pages on Storefront
Used in Product Listing

O atributo é atribuído a um conjunto de atributos e é exibido na visualização do produto conforme pretendido.

No entanto, não é visível na exibição do catálogo, estou usando o tema Luma padrão e limpei o cache e re-indexei. Se eu visualizar o arquivo de modelo:

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

Não consigo encontrar nenhum código obtendo atributos personalizados, portanto o tema Luma não parece suportar isso por padrão.

Como posso obter um rótulo e valor de atributo personalizado de produtos em list.phtml ?

Respostas:


22

Podemos obter um valor de atributo personalizado como abaixo

Valor do atributo

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

Rótulo

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

Nota: na linha acima c_address é o meu código de atributo personalizado.

Referência: Magento/Catalog/templates/product/view/attribute.phtml


não funciona se o atributo for um media imagetipo.
— LucScu

@ Gilal, para mim, atributos personalizados estão mostrando "erro fatal getFrontend" em list.phtml. você pode dizer por favor como evitar esse erro, por favor, se você tem alguma idéia
— Hitesh Balpande

11

Eu criei um artigo sobre isso, que tem apenas 5 etapas para fazer isso:

1 - Crie seu atributo em Lojas> Atributos> Produto .

2 - Defina o atributo no grupo Padrão, vá para Lojas> Atributos> Conjunto de Atributos .

3 - Defina os valores desses atributos em seus produtos.

4 - Abra em seu tema personalizado o arquivo relativo abaixo:

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

5 - Entre a função foreach, cole este código abaixo, mas altere o código do seu atributo correto:

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

if ($_getMyAttr){

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

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

Importante

Certifique-se de que as opções "Visível na página de exibição do produto no front-end" e "Usado na lista de produtos" em Propriedades da fachada estejam definidas como Sim.

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


Com o media imageatributo "Visível na página de visualização do produto no front-end" e "Usado na lista de produtos" não são configuráveis.
— LucScu

o mesmo para o atributo price
— CompactCode

onde posso encontrar o list.phtml padrão?
— Mikebertiean

Olá, etiqueta atributo é trabalho para mim, mas não o valor do atributo
— Sarvesh Tiwari

6

Usa isto

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

1

@mikebertiean Para encontrar o list.phtml padrão, navegue até

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

Depois de copiá-lo, alterá-lo e adicioná-lo ao caminho que Rafael mencionou, você só precisa liberar o cache e ele funcionará.


0

Aberto

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

Adicione o seguinte entre o loop 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;
}

?>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.