Magento उत्पाद गुण मान प्राप्त करें


82

यदि मैं संपूर्ण उत्पाद लोड किए बिना उत्पाद आईडी जानता हूं तो विशिष्ट उत्पाद विशेषता मूल्य कैसे प्राप्त करें?


1
एक महान जवाब नहीं है, लेकिन आप एक मॉडल बना सकते हैं जो उपयुक्त तालिकाओं पर सीधे सवाल
उठाता है

जवाबों:


141
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

1
इस का विकल्प पाठ कैसे प्राप्त करें? क्या कोई जानता है?
खूंखार अर्धविराम

2
उन लोगों के लिए जिनके लिए यह मायने रखता है: यह विधि केवल 1.6+
JMTyler

40

एक तरीका जो मुझे पता है:

$product->getResource()->getAttribute($attribute_code)
        ->getFrontend()->getValue($product)

3
धन्यवाद। यह वही था जिसकी मुझे तलाश थी।
रिकार्डो मार्टिंस

4
मैं Magento के लिए नया हूँ .. $productदो बार का उपयोग क्यों कर रहा हूँ ?
Mr_Green

28
@Mr_Green क्योंकि यह Magento है। कोई 'क्यों' को उचित जवाब नहीं मिलता है।
नकाजूसिस 12

@Mr_Green, यह इसे दो बार उपयोग करने के लिए नहीं कह रहा है: दूसरी पंक्ति पहले की निरंतरता है। आप getFrontend () द्वारा लौटाए गए ऑब्जेक्ट पर getFrontend () को कॉल कर रहे हैं।
स्कॉट बुकानन

26

आप उपयोग कर सकते हैं

<?php echo $product->getAttributeText('attr_id')  ?> 

2
यह कोड अच्छा काम कर रहा है। मैंने कई ब्लॉग खोजे लेकिन मेरे अलावा किसी ने भी इसके लिए काम नहीं किया बहुत अच्छे।
पटेल दीक्षित

3
यह कोड तभी काम करता है जब उत्पाद मॉडल में विशेषता मान होता है, जब आप केवल उत्पाद आईडी जानते हैं तो यह काम नहीं करेगा
Jiří Chmiel

1
यह ड्रॉपडाउन सूची जैसी विशेषताओं के लिए काम करता है लेकिन यदि विशेषता एक सरल पाठ क्षेत्र है तो एक अलग फ़ंक्शन की आवश्यकता है। कहो विशेषता my_name है तो कोड $ उत्पाद बन जाता है-> getMyName ()
Ken

1
@ फिर, यदि आपको उत्पाद से एक गतिशील विशेषता प्राप्त करने की आवश्यकता है, तो आप का उपयोग कर सकते हैं$product->getData('my_name')
pavlindrom

और क्या हमें विकल्प आईडी मिलेगी? $ उत्पाद-> getAttributeId ('attr_id') ???
snh_nl

9

कृपया डैनियल Kocherga का जवाब देखें , क्योंकि यह आपके लिए ज्यादातर मामलों में काम करेगा।

विशेषता के मूल्य को प्राप्त करने के लिए उस पद्धति के अतिरिक्त, आप कभी-कभी selectया का लेबल प्राप्त करना चाह सकते हैं multiselect। उस मामले में, मैंने यह विधि बनाई है जिसे मैं एक सहायक वर्ग में संग्रहीत करता हूं:

/**
 * @param int $entityId
 * @param int|string|array $attribute atrribute's ids or codes
 * @param null|int|Mage_Core_Model_Store $store
 *
 * @return bool|null|string
 * @throws Mage_Core_Exception
 */
public function getAttributeRawLabel($entityId, $attribute, $store=null) {
    if (!$store) {
        $store = Mage::app()->getStore();
    }

    $value = (string)Mage::getResourceModel('catalog/product')->getAttributeRawValue($entityId, $attribute, $store);
    if (!empty($value)) {
        return Mage::getModel('catalog/product')->getResource()->getAttribute($attribute)->getSource()->getOptionText($value);
    }

    return null;
}

8

उत्पाद मॉडल लोड किए बिना मूल्य प्राप्त करना असंभव लगता है। यदि आप फ़ाइल ऐप / कोड / कोर / Mage / Eav / मॉडल / इकाई / विशेषता / फ्रंटेंड / Abstract.php पर एक नज़र डालते हैं, तो आप विधि देखेंगे

public function getValue(Varien_Object $object)
{
    $value = $object->getData($this->getAttribute()->getAttributeCode());
    if (in_array($this->getConfigField('input'), array('select','boolean'))) {
        $valueOption = $this->getOption($value);
        if (!$valueOption) {
            $opt = new Mage_Eav_Model_Entity_Attribute_Source_Boolean();
            if ($options = $opt->getAllOptions()) {
                foreach ($options as $option) {
                    if ($option['value'] == $value) {
                        $valueOption = $option['label'];
                    }
                }
            }
        }
        $value = $valueOption;
    }
    elseif ($this->getConfigField('input')=='multiselect') {
        $value = $this->getOption($value);
        if (is_array($value)) {
            $value = implode(', ', $value);
        }
    }
    return $value;
}

जैसा कि आप देख सकते हैं कि इस विधि से डेटा प्राप्त करने के लिए लोड की गई वस्तु की आवश्यकता होती है (तीसरी पंक्ति)।


5

पहले हमें यह सुनिश्चित करना चाहिए कि वांछित विशेषता भरी हुई है, और फिर इसे आउटपुट करें। इसे इस्तेमाल करो:

$product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>'));
$attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product);

4

इसे इस्तेमाल करे

 $attribute = $_product->getResource()->getAttribute('custom_attribute_code');
    if ($attribute)
    {
        echo $attribute_value = $attribute ->getFrontend()->getValue($_product);
    }

2

आपको पूरे उत्पाद को लोड करने की आवश्यकता नहीं है। Magentos संग्रह बहुत शक्तिशाली और स्मार्ट हैं।

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('entity_id', $product->getId());
$collection->addAttributeToSelect('manufacturer');
$product = $collection->getFirstItem();
$manufacturer = $product->getAttributeText('manufacturer');

फिलहाल आप getFirstItem को कॉल करें () क्वेरी निष्पादित की जाएगी और परिणाम उत्पाद बहुत कम है:

[status] => 1
[entity_id] => 38901
[type_id] => configurable
[attribute_set_id] => 9
[manufacturer] => 492
[manufacturer_value] => JETTE
[is_salable] => 1
[stock_item (Varien_Object)] => Array
    (
        [is_in_stock] => 1
    )


0

आप निम्नलिखित तरीके से विशेषता मान प्राप्त कर सकते हैं

$model = Mage::getResourceModel('catalog/product');
$attribute_value = $model->getAttributeRawValue($productId, 'attribute_code', $storeId);

-1

$orderId = 1; // YOUR ORDER ID
$items = $block->getOrderItems($orderId);
 
foreach ($items as $item) {
    $options = $item->getProductOptions();        
    if (isset($options['options']) && !empty($options['options'])) {        
        foreach ($options['options'] as $option) {
            echo 'Title: ' . $option['label'] . '<br />';
            echo 'ID: ' . $option['option_id'] . '<br />';
            echo 'Type: ' . $option['option_type'] . '<br />';
            echo 'Value: ' . $option['option_value'] . '<br />' . '<br />';
        }
    }
}

Magento 2 में मूल्य उत्पाद कस्टम विकल्प कार्ट ऑर्डर को पुनः प्राप्त करने के लिए आप सभी चीजों का उपयोग करेंगे: https://www.mageplaza.com/how-get-value-product-custom-option-cart-order-magento-2.html


-2

आप एक ऐसा तरीका लिख ​​सकते हैं, जो इसे सीधे sql I के माध्यम से करेगा।

कुछ इस तरह दिखेगा:

चर:

$store_id = 1;
$product_id = 1234;
$attribute_code = 'manufacturer';

प्रश्न:

SELECT value FROM eav_attribute_option_value WHERE option_id IN (
    SELECT option_id FROM eav_attribute_option WHERE FIND_IN_SET(
        option_id, 
        (SELECT value FROM catalog_product_entity_varchar WHERE
            entity_id = '$product_id' AND 
            attribute_id = (SELECT attribute_id FROM eav_attribute WHERE
                attribute_code='$attribute_code')
        )
    ) > 0) AND
    store_id='$store_id';

आपको विशेषता के बैकेंड_टाइप (eav_attribute में फ़ील्ड) के आधार पर सही तालिका से मान प्राप्त करना होगा, हालांकि इसमें कम से कम 1 अतिरिक्त क्वेरी लगती है।


धन्यवाद! अच्छा लग रहा है, लेकिन सभी विशेषताएँ varchar नहीं हैं और 3 चुनिंदा समावेश अच्छे नहीं हैं। शायद इससे जुड़ने का उपयोग करना बेहतर है?
डेनिस Denisbukhov

मैं गलत हो सकता हूं, लेकिन जहां तक ​​मुझे पता है कि क्वेरी प्रोसेसर द्वारा अनुकूलित और चयनित होने के बीच कोई बड़ा अंतर नहीं है। लेकिन सभी विशेषताओं के बारे में नहीं होने के कारण, आपको सबसे पहले उस विशेषता का बैकएंड_टाइप प्राप्त करना होगा, जिसे आप प्राप्त करना चाहते हैं और फिर टेबल स्प्रिंट ('कैटलॉग_प्रोडक्ट_एंट_% s', $ backend_type) ^ का उपयोग करें। लेकिन FIND_IN_SET का उपयोग करके अन्य प्रकार भी प्राप्त नहीं किए जा सकते हैं, इसलिए आपको इसके लिए भी कुछ खोजना होगा। सौभाग्य!
लुकास मॉस्कोप्स 14

-2

यदि आपके पास my_attr नाम का कोई टेक्स्ट / टेक्स्टरी विशेषता है, तो आप इसे प्राप्त कर सकते हैं: product->getMyAttr();


मैंने पूछा है "पूरे उत्पाद को लोड किए बिना"
डेनिस hovbukhov
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.