Magento 2 - Como obter atributo do produto?

Respostas:

15

Outra maneira, para os atributos personalizados: podemos simplesmente obter o valor usando getCustomAttribute ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}
Khoa TruongDinh
fonte
19

A melhor prática no magento é fazê-lo via xml.

Para obter um atributo padrão, faça algo parecido com isto, catalog_product_view.xmlpor exemplo:

<referenceContainer name="product.info.main">
    <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.brand" template="product/view/attribute.phtml" before="-">
        <arguments>
            <argument name="at_call" xsi:type="string">getBrand</argument>
            <argument name="at_code" xsi:type="string">brand</argument>
            <argument name="css_class" xsi:type="string">brand</argument>
            <argument name="at_label" xsi:type="string">none</argument>
            <argument name="add_attribute" xsi:type="string">itemprop="brand"</argument>
        </arguments>
    </block>
</referenceContainer>

Isso obterá o valor de um atributo de entrada ou área de texto. Se você tiver uma lista suspensa, use o tipo de texto; adicione esta linha na lista de argumentos:

<argument name="at_type" xsi:type="string">text</argument>

Não há necessidade de criar arquivos ou escrever qualquer código php para obter um atributo. Dessa forma, você usará o mesmo código php padrão para qualquer atributo e precisará alterá-lo apenas uma vez, se necessário.

Claudiu Creanga
fonte
3
Como sua solução, mudou <referenceBlock para <referenceContainer e funcionou como "product.info.main" é um recipiente :)
DEVTYPE
11

Eu tinha solução para o meu problema:

$product = $this->productRepository->getById($product);
$attr = $product->getData('status');
MrTo-Kane
fonte
7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

Espero que ajude

Saurabh Taletiya
fonte
11
Por favor, tente usar uma classe de bloco como "Magento \ Catálogo \ Bloco \ Produto \ Visualização \ Descrição", mas eu recomendaria não usar o Gerenciador de Objetos no Magento 2, a menos que como último recurso.
Dynomite
5

Outra maneira em arquivos phtml:

echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($block->getProduct(), $block->getProduct()->getDescription(), 'description')

como em: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml

Waltr
fonte
essa é uma maneira melhor de fazê-lo do que usar o gerenciador de objetos, que quase sempre é desencorajado. +1
Dynomite
melhor solução que encontrei. 1: D
jehzlau
1

Criando um bloco dentro do catalog_product_view.xml e adicione dentro de qualquer contêiner desejado ou crie um contêiner em torno dele.

<!-- Get a attribute -->
<block class="Magento\Catalog\Block\Product\View\Description" name="product.attributes.Height" template="product/view/attribute.phtml" before="-">
    <arguments>
        <argument name="at_call" xsi:type="string">getHeight</argument>
        <argument name="at_code" xsi:type="string">height</argument>
        <argument name="css_class" xsi:type="string">height</argument>
        <argument name="at_label" xsi:type="string">none</argument>
        <argument name="add_attribute" xsi:type="string">itemprop="Height"</argument>
    </arguments>
</block>
Nathaniel Meyer
fonte