2011-08-18 15 views
7

मेरे पास विशेषता कोडों की एक सरणी है जो मुझे मान प्राप्त करने की आवश्यकता है:क्या विशेषता का फ्रंटएंड मान प्राप्त करने का कोई आसान तरीका है?

$attributes = array(
    'Category'   => 'type', 
    'Manufacturer'  => 'brand', 
    'Title'    => 'meta_title', 
    'Description'  => 'description', 
    'Product Link'  => 'url_path', 
    'Price'    => 'price', 
    'Product-image link' => 'image', 
    'SKU'    => 'sku', 
    'Stock'    => 'qty', 
    'Condition'   => 'condition', 
    'Shipping cost'  => 'delivery_cost'); 

उत्पाद संग्रह के माध्यम से पुनरावृत्ति के बाद मुझे इस तरह के गुणों के अग्रभाग मान प्राप्त होते हैं:

$attributeId = Mage::getResourceModel('eav/entity_attribute') 
    ->getIdByCode('catalog_product', $attribute_code); 
$attribute = Mage::getModel('catalog/resource_eav_attribute') 
    ->load($attributeId); 
$value = $attribute->getFrontend()->getValue($product); 

बस उपयोग $product->getDate($attribute) ड्रॉपडाउन और बहु-चयन के साथ काम नहीं करेगा, यह सिर्फ उनकी आईडी लौटाता है, न कि उनके फ्रंटएंड वैल्यू।

जबकि उपर्युक्त कोड काम करता है, यह मान प्राप्त करने के लिए एक लंबा रास्ता प्रतीत होता है, लेकिन अधिक महत्वपूर्ण बात यह काफी धीमी गति से चलती है। क्या उत्पाद विशेषताओं के लिए फ्रंटएंड मान प्राप्त करने के लिए कोई तेज़/अधिक समझदार तरीका है?


संपादित करें अब मेरे पास निम्नलिखित है (image और qty जैसे विशेष मामलों से निपटने के बाद) जो आंखों पर थोड़ा आसान है और लगता है कि तेज़ी से चल रहा है (हालांकि मुझे नहीं पता क्यों):

$inputType = $product->getResource() 
        ->getAttribute($attribute_code) 
        ->getFrontend() 
        ->getInputType(); 

switch ($inputType) { 
case 'multiselect': 
case 'select': 
case 'dropdown': 
    $value = $product->getAttributeText($attribute_code); 
    if (is_array($value)) { 
     $value = implode(', ', $value); 
    } 
    break; 
default: 
    $value = $product->getData($attribute_code); 
    break; 
} 

$attributesRow[] = $value; 

अगर कोई इसे सुधार सकता है (इसे सरल/अधिक कुशल बनाएं), तो कृपया एक उत्तर पोस्ट करें।

+2

इस लेख पर एक नजर डालें http://blog.chapagain.com.np/magento-how-to-get-attribute-name-and- मूल्य/ –

+1

धन्यवाद, उपयोगी लेख। – Jamie

उत्तर

11

ड्रॉपडाउन और मल्टीइलेक्स्ट के लिए और केवल उत्पादों के साथ (यह एक सामान्य ईएवी चाल नहीं है) आप getAttributeText() का उपयोग कर सकते हैं।

$value = $product->getAttributeText($attribute_code); 
+0

इसे इंगित करने के लिए धन्यवाद। मुझे आश्चर्य हुआ कि यह कैसे था कि यह विधि कुछ विशेषताओं पर काम करती थी, न कि दूसरों को। – Jamie

0

यह कैसे आप विशेषता (उदाहरण के लिए, meta_title के लिए), लेकिन सबसे आसान तरीका है इस तरह आम तौर पर है (यह संदर्भ आप इसे तक पहुँचने की कोशिश कर रहे हैं से पहुँचा जा सकता है?) की स्थापना की है पर निर्भर करता है:

$product->getMetaTitle() 
+0

धन्यवाद, लेकिन कुछ विशेषताओं को जादू गेटर विधि का उपयोग करके सुलभ नहीं किया जा सकता है। – Jamie

3

संस्करण 1.7 में, $product->getAttributeText($attribute_code) उत्पाद पृष्ठ पर मेरे लिए काम नहीं कर रहा है। पहले मैंने सोचा था कि यह इसलिए था क्योंकि विशेषता catalog_product_flat अनुक्रमणिका में नहीं थी। लेकिन यह पता चला कि विशेषता वहां थी। किसी भी मामले में, निम्नलिखित कोड मेरे लिए काम करता है। मैं सरल कोड आज़माता हूं, फिर ईएवी कोड पर वापस आ जाता हूं। इस तरह

कोड तो मैं उपयोग कर रहा हूँ:

$value = $product->getAttributeText($attribute_code); // first try the flat table? 
if(empty($value)) { // use the EAV tables only if the flat table doesn't work 
    $value = $product->getResource()->getAttribute($attribute_code)->getFrontend()->getValue($product); 
} 
+1

मैं उत्पादों का संग्रह पुनर्प्राप्त कर रहा था, और 'getValue ($ product)' कर रहा था '' नहीं '। मैंने '$ product' को' Mage :: getModel ('catalog/product') -> लोड ($ product-> getEntityId()) 'में बदल दिया है और एक उत्पाद प्राप्त किया है जिसके तरीके डेटाबेस पर जाएंगे। अन्यथा, कोड डेटा की आंतरिक सरणी से डेटा प्राप्त करने का प्रयास करेगा। सामान्य परिस्थितियों में, मुझे उम्मीद है कि उपरोक्त कोड ठीक काम करता है। – pavlindrom

संबंधित मुद्दे

 संबंधित मुद्दे