Magento 2 - Bagaimana cara mendapatkan atribut produk?


Jawaban:


15

Cara lain, untuk atribut khusus: kita cukup mendapatkan nilai dengan menggunakan getCustomAttribute ()

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

19

Praktik terbaik di Magento adalah melakukannya melalui xml.

Untuk mendapatkan atribut standar, Anda melakukan sesuatu seperti ini di catalog_product_view.xmlmisalnya:

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

Ini akan mendapatkan nilai atribut input atau textarea. Jika Anda memiliki dropdown, Anda harus menggunakan jenis teks, jadi tambahkan baris ini dalam daftar argumen:

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

Tidak perlu membuat file atau menulis kode php apa pun untuk mendapatkan atribut. Dengan cara ini Anda akan menggunakan kode php default yang sama untuk atribut apa pun dan Anda harus mengubahnya hanya sekali jika diperlukan.


3
Seperti solusi Anda, mengubah <referenceBlock ke <referenceContainer dan berfungsi sebagai "product.info.main" adalah sebuah wadah :)
Devtype

11

Saya punya solusi untuk masalah saya:

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

Semoga ini bisa membantu


1
Tolong, cobalah untuk menggunakan kelas blok seperti "Magento \ Katalog \ Blok \ Produk \ Lihat \ Deskripsi" tetapi saya akan merekomendasikan untuk tidak menggunakan Object Manager di Magento 2 kecuali sebagai pilihan terakhir.
Dynomite

5

Cara lain dalam file-file phtml:

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

seperti dalam: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml


ini adalah cara yang lebih baik untuk melakukannya daripada menggunakan object manager yang hampir selalu berkecil hati. +1
Dynomite

solusi terbaik yang saya temukan. +1: D
jehzlau

1

Membuat Blok di dalam catalog_product_view.xml dan menambahkan di dalam wadah apa pun yang Anda inginkan atau membuat wadah di sekitarnya.

<!-- 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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.