2011-06-07 11 views
19

मैं Magento स्टोर को अनुकूलित करने की प्रक्रिया में हूं, और मैंने कुछ पोस्टों में भाग लिया है जो बड़ी मात्रा में एसकेयू के साथ स्टोर्स के लिए फ्लैट उत्पाद कैटलॉग का उपयोग करने की सलाह देते हैं।क्या मैं Magento के फ्लैट उत्पाद सूची तालिका में अन्य विशेषताओं को जोड़ सकता हूं?

जैसा कि मेरे पास 10K से अधिक उत्पाद हैं, मैंने सोचा कि मैं इसे आज़मा दूंगा। हालांकि, फ़्लैट उत्पाद कैटलॉग का उपयोग करते समय केवल कुछ ऑब्जेक्ट्स उत्पाद ऑब्जेक्ट में लोड होते हैं (उदा। एसकेयू, नाम, संक्षिप्त वर्णन)। और मेरा टेम्पलेट खोज/ब्राउज़ दृश्य, जैसे निर्माता और रंग में कुछ अन्य विशेषताओं को प्रदर्शित करता है।

क्या इन गुणों को फ्लैट उत्पाद सूची तालिका में जोड़ने का कोई तरीका है ताकि उन्हें भी एक्सेस किया जा सके?

उत्तर

41

1.4.x.x, बस गुण आप "फ्लैट उत्पाद सूची" में इस्तेमाल किया जा करना चाहते हैं में जाते हैं और यकीन है कि संपत्ति "उत्पाद में प्रयुक्त लिस्टिंग"हाँ के लिए सेट है। परिवर्तन करने पर, पुन: अनुक्रमणिका "फ्लैट उत्पाद डाटा"

निम्नलिखित गुण के कारण विशेषता "फ्लैट उत्पाद सूची" में शामिल किया जाना:

"Use in Layered Navigation" = Yes 
"Used in Product Listing" = Yes 
"Used for Sorting in Product Listing" = Yes 
+3

"पी में प्रयुक्त कर सकते हैं roduct लिस्टिंग "कुंजी प्रतीत होता है। मेरे पास कई विशेषताएं थीं जो पहले से ही "स्तरित नेविगेशन में उपयोग करें" थीं, लेकिन जब तक मैं "उत्पाद प्रविष्टि में प्रयुक्त" सेट नहीं करता तब तक वे catalog_product_flat_1 तालिका में दिखाई नहीं दे रहे थे। – ben

9

मैं भी इस मुद्दे के माध्यम से काम कर रहा है, जो मैं "फ्लैट मोड में उत्पाद संग्रह विशेषता तक नहीं पहुंच सकता" या "addAttributeTo चयन को फ्लैट मोड में काम नहीं कर रहा" के रूप में वर्णित करता हूं।

मैं एक "क्लीन" समाधान नहीं मिला जो:

  • विशेषता की आवश्यकता नहीं है व्यवस्थापक में विशिष्ट सेटिंग (यह एक उपयोगकर्ता द्वारा जोड़ा जा सकता है, या सामने के छोर पर छिपा हुआ)
  • काम करता है करने के लिए दोनों फ्लैट और गैर फ्लैट मोड के लिए

कृपया ध्यान दें - कोड में नीचे मैं जुड़े उत्पाद संग्रह का इस्तेमाल किया है, लेकिन यह किसी भी उत्पाद संग्रह करने के लिए (विशेष रूप से Mage_Eav_Model_Entity_Collection_Abstract से इनहेरिट कुछ भी,)

०१२३५१६४१०६ लागू होता है

असफल कोड:

$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'ABC123'); 
$coll = $_product->getTypeInstance()->getAssociatedProductCollection() 
    ->addAttributeToSelect('my_custom_attribute') 
; 

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

कार्य कोड:

$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'ABC123'); 
$coll = $_product->getTypeInstance()->getAssociatedProductCollection() 
    ->joinAttribute('my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left') 
    ->addAttributeToSelect('my_custom_attribute') 
; 

joinAttribute विधि एक सवाल के शामिल होने के कहते हैं। यह तब भी काम करता है जब यह एक विशेषता को डुप्लिकेट करता है जो पहले से ही फ्लैट तालिका में है।

ध्यान दें कि मैंने left का उपयोग किया है ताकि यह सुनिश्चित किया जा सके कि यह उत्पाद प्राप्त करता है यदि my_custom_attribute उन उत्पादों पर सेट नहीं है। आप inner के लिए इसे बदल सकते हैं यदि आप केवल पंक्तियों में रूचि रखते हैं जहां my_custom_attribute सेट है।

(सीई 1.6.2.0 में परीक्षण)

+0

समस्या का एकमात्र तार्किक समाधान! धन्यवाद –

5

दूसरों आमतौर पर पर्याप्त जवाब (सेटिंग उत्पाद प्रविष्टि हाँ करने के लिए प्रयोग किया जाता है) की व्यवस्था की है, लेकिन मैं एक बढ़त मामले कि पता करने के लिए जब मैं उपयोगी हो गया होता पाया वही चीज़ खोज रहा था।

यदि आप कस्टम विशेषता तालिका के लिए कस्टम स्रोत मॉडल का उपयोग कर रहे हैं, तो आप फ्लैट उत्पाद तालिका में शामिल करना चाहते हैं, तो आपको स्रोत मॉडल वर्ग में getFlatColums() ओवरराइड करना होगा। हां, मुझे पता है कि यह गलत वर्तनी है, लेकिन यह आपके लिए मूल Magento है।

नमूना:

public function getFlatColums() { 
    return array($this->getAttribute()->getAttributeCode() => array(
     'type'  => 'tinyint', 
     'unsigned' => true, 
     'is_null' => true, 
     'default' => null, 
     'extra'  => null 
    )); 
} 

स्रोत: http://www.dconstructing.com/2012/03/14/custom-product-attributes-and-flat-database-tables-in-magento

1

आप एक मॉड्यूल में एक विशेषता का उपयोग करने के फ्लैट उत्पाद तालिका का उपयोग करते समय चाहते हैं (उदाहरण के लिए उत्पादों की एक संग्रह को फ़िल्टर) आप इसे मॉड्यूल के Module_File.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Your_Module> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Your_Module> 
    </modules> 
    <frontend> 
     <product> 
      <collection> 
       <attributes> 
        <your_custom_attribute /> <!-- This is the attribute name --> 
       </attributes> 
      </collection> 
     </product> 
    </frontend> 
</config> 
संबंधित मुद्दे