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

11

私の問題の解決策がありました:

$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でObject Managerを使用しないことをお勧めします。
ダイノマイト

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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.