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>

Це отримає значення атрибута введення або textarea. Якщо у вас є спадне меню, ви повинні використовувати тип тексту, тому додайте цей рядок у список аргументів:

<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');

7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

Сподіваюся, це допомагає


1
Будь ласка, спробуйте використовувати клас блоків, наприклад "Magento \ Каталог \ Блок \ Продукт \ Перегляд \ Опис", але я б рекомендував не використовувати 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


це кращий спосіб зробити це, ніж використання диспетчера об'єктів, який майже завжди не рекомендується. +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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.