कार्य तुच्छ है। मुझे विशेष रूप से स्टोर करने के लिए उत्पादों की सूची प्राप्त करने की आवश्यकता है, जिसमें एक फ्लैट कैटलॉग सक्षम है। सबसे स्पष्ट समाधान निम्नलिखित है:
$collection = Mage::getResourceModel('catalog/product_collection')
->setStore($storeId);
वास्तव में setStore()
विधि यहाँ कोई अंतर नहीं कर रही है क्योंकि इसे _initSelect()
विधि के बाद कहा जाता है जिसे Mage_Catalog_Model_Resource_Product_Collection
स्टोर आईडी के आधार पर फ्लैट टेबल का नाम मिलता है। जैसा कि स्टोर आईडी अभी सेट नहीं है, यह वर्तमान स्टोर आईडी लेता है।
तो स्पष्ट समाधान एक मॉडल प्राप्त करने से पहले एक वर्तमान स्टोर आईडी सेट करना होगा।
Mage::app()->setCurrentStore($storeId);
$collection = Mage::getResourceModel('catalog/product_collection');
यह काम करेगा। लेकिन केवल अगर आपको एक बार एक संग्रह प्राप्त करने की आवश्यकता है। यदि आपको लूप में एक संग्रह प्राप्त करने की आवश्यकता है या आपको केवल दो बैक-टू-बैक संग्रह की आवश्यकता है, तो आप उनके लिए एक विशिष्ट स्टोर सेट करने में सक्षम नहीं होंगे।
कारण यह है कि Mage_Catalog_Model_Resource_Product_Flat
वर्ग की अपनी _storeId
संपत्ति है और निर्माणकर्ता में यह वर्तमान स्टोर आईडी पर सेट है। इसलिए इसे पहली बार सेट किया जाएगा। फिर किसी कारण से (स्वर्ग जानता है कि मुझे आशा है कि एक है) Mage_Eav_Model_Entity_Collection_Abstract::_init
प्रत्येक संसाधन मॉड्यूल में एक सिंगलटन के रूप में लाया जाता है। तो 2 कॉल के लिए कोई कंस्ट्रक्टर नहीं।
यह सब इतना गलत लगता है कि मुझे पूरा यकीन है कि मैं गलत हूं और यह एक और मैगेंटो बग (या दो) नहीं है। आशा है कि कोई इस पर प्रकाश डाल सकता है।