Magento 2 - ¿Cómo obtener el atributo del producto?

Respuestas:

15

Otra forma, para los atributos personalizados: simplemente podemos obtener el valor usando getCustomAttribute ()

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

La mejor práctica en magento es hacerlo a través de xml.

Para obtener un atributo estándar, haga algo como esto, catalog_product_view.xmlpor ejemplo:

<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>

Esto obtendrá el valor de un atributo de entrada o área de texto. Si tiene un menú desplegable, debe usar el tipo de texto, así que agregue esta línea en la lista de argumentos:

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

No es necesario crear archivos o escribir ningún código php para obtener un atributo. De esta forma, usará el mismo código php predeterminado para cualquier atributo y tendrá que cambiarlo solo una vez si es necesario.

Claudiu Creanga
fuente
3
Al igual que su solución, cambió <referenceBlock a <referenceContainer y funcionó como "product.info.main" es un contenedor :)
Devtype
11

Tenía solución para mi problema:

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

Espero eso ayude

Saurabh Taletiya
fuente
1
Intente usar una clase de bloque como "Magento \ Catalog \ Block \ Product \ View \ Descripción", pero recomendaría no usar Object Manager en Magento 2 a menos que sea el último recurso.
Dynomite
5

Otra forma en archivos phtml:

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

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

waltr
fuente
esta es una mejor manera de hacerlo que usar el administrador de objetos que casi siempre se desaconseja. +1
Dynomite
La mejor solución que encontré. +1: D
jehzlau
1

Crear un bloque dentro de catalog_product_view.xml y agregar dentro de cualquier contenedor que desee o crear un contenedor a su alrededor.

<!-- 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
fuente