Magento 2 - उत्पाद की विशेषता कैसे प्राप्त करें?


जवाबों:


16

कस्टम विशेषताओं के लिए दूसरा तरीका: हम केवल 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 \ कैटलॉग \ Block \ Product \ View \ Description" जैसे एक ब्लॉक वर्ग का उपयोग करने का प्रयास करें, लेकिन मैं Magento 2 में ऑब्जेक्ट मैनेजर का उपयोग नहीं करने की सलाह दूंगा जब तक कि अंतिम उपाय के रूप में नहीं।
डायनामाइट

5

Phtml-files में दूसरा तरीका:

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

कैटलॉग_प्रोडक्ट_व्यू.एक्सएमएल के अंदर एक ब्लॉक बनाना और अपने इच्छित कंटेनर के अंदर जोड़ना या इसके चारों ओर एक कंटेनर बनाना।

<!-- 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.