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();
}
Khoa TruongDinh
sumber
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.

Claudiu Creanga
sumber
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');
MrTo-Kane
sumber
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

Saurabh Taletiya
sumber
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

waltr
sumber
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>
Nathaniel Meyer
sumber