Magento 2 - Как получить атрибут товара?

Ответы:

15

Другой способ для пользовательских атрибутов: мы можем просто получить значение с помощью getCustomAttribute ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}
Хоа ТруонгДинь
источник
19

Лучшая практика в magento - это делать через xml.

Чтобы получить стандартный атрибут, вы делаете что-то вроде этого, catalog_product_view.xmlнапример:

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

Это получит значение входного атрибута или текстовой области. Если у вас есть выпадающий список, вы должны использовать текстовый тип, поэтому добавьте эту строку в список аргументов:

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

Нет необходимости создавать файлы или писать код php, чтобы получить атрибут. Таким образом, вы будете использовать один и тот же php-код по умолчанию для любого атрибута, и вам придется изменять его только один раз, если это необходимо.

Клаудиу Крянгэ
источник
3
Как и ваше решение, изменил <referenceBlock на <referenceContainer, и он работал, так как «product.info.main» является контейнером :)
Devtype
12

У меня было решение для моей проблемы:

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

Надеюсь, это поможет

Саураб Талетия
источник
1
Пожалуйста, попробуйте использовать класс блока, такой как «Magento \ Catalog \ Block \ Product \ View \ Description», но я бы порекомендовал не использовать Object Manager в Magento 2, если это не последнее средство.
Диномит
5

Еще один способ в phtml-файлах:

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

как в: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml

waltr
источник
это лучший способ сделать это, чем использовать диспетчер объектов, который почти всегда не рекомендуется. +1
Диномит
лучшее решение, которое я нашел. +1: D
Jehzlau
1

Создание блока внутри catalog_product_view.xml и добавление внутри любого контейнера, который вы хотите, или создание контейнера вокруг него.

<!-- 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>
Натаниэль Мейер
источник