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.