Magento 2 - วิธีรับคุณลักษณะของผลิตภัณฑ์?


คำตอบ:


15

อีกวิธีหนึ่งสำหรับแอตทริบิวต์ที่กำหนดเอง: เราสามารถรับค่าโดยใช้getCustomAttribute ()

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

19

แนวทางปฏิบัติที่ดีที่สุดในวีโอไอพีคือการทำผ่าน 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" แต่ฉันขอแนะนำไม่ให้ใช้ Object Manager ใน Magento 2 เว้นแต่จะเป็นทางเลือกสุดท้าย
Dynomite

5

อีกวิธีในไฟล์ HTML:

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 และเพิ่มภายในคอนเทนเนอร์ใด ๆ ที่คุณต้องการหรือสร้างคอนเทนเนอร์รอบ ๆ

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