Magento 2-如何获取产品属性?


Answers:


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 \ Catalog \ Block \ Product \ View \ Description”之类的块类,但是除非万不得已,否则我建议不要在Magento 2中使用对象管理器。
Dynomite

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
Dynomite

我找到的最佳解决方案。+1:D
jehzlau

1

在catalog_product_view.xml内创建一个Block,并在所需的任何容器内添加或在其周围创建一个容器。

<!-- 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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.