यदि मैं संपूर्ण उत्पाद लोड किए बिना उत्पाद आईडी जानता हूं तो विशिष्ट उत्पाद विशेषता मूल्य कैसे प्राप्त करें?
यदि मैं संपूर्ण उत्पाद लोड किए बिना उत्पाद आईडी जानता हूं तो विशिष्ट उत्पाद विशेषता मूल्य कैसे प्राप्त करें?
जवाबों:
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
एक तरीका जो मुझे पता है:
$product->getResource()->getAttribute($attribute_code)
->getFrontend()->getValue($product)
$product
दो बार का उपयोग क्यों कर रहा हूँ ?
आप उपयोग कर सकते हैं
<?php echo $product->getAttributeText('attr_id') ?>
$product->getData('my_name')
कृपया डैनियल 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;
}
उत्पाद मॉडल लोड किए बिना मूल्य प्राप्त करना असंभव लगता है। यदि आप फ़ाइल ऐप / कोड / कोर / 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;
}
जैसा कि आप देख सकते हैं कि इस विधि से डेटा प्राप्त करने के लिए लोड की गई वस्तु की आवश्यकता होती है (तीसरी पंक्ति)।
पहले हमें यह सुनिश्चित करना चाहिए कि वांछित विशेषता भरी हुई है, और फिर इसे आउटपुट करें। इसे इस्तेमाल करो:
$product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>'));
$attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product);
इसे इस्तेमाल करे
$attribute = $_product->getResource()->getAttribute('custom_attribute_code');
if ($attribute)
{
echo $attribute_value = $attribute ->getFrontend()->getValue($_product);
}
आपको पूरे उत्पाद को लोड करने की आवश्यकता नहीं है। 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
)
यह एक काम करता है-
echo $_product->getData('ATTRIBUTE_NAME_HERE');
$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
आप एक ऐसा तरीका लिख सकते हैं, जो इसे सीधे 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 अतिरिक्त क्वेरी लगती है।
यदि आपके पास my_attr नाम का कोई टेक्स्ट / टेक्स्टरी विशेषता है, तो आप इसे प्राप्त कर सकते हैं:
product->getMyAttr();