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 ?

oscarpas
fonte

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

Bilal Usean
fonte
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

Rafael Corrêa Gomes
fonte
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); 
}
Zeeshan Khuwaja
fonte
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á.

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

?>
Teja Bhagavan Kollepara
fonte