2013-02-26 123 views
5

मुझे अक्षम स्थिति द्वारा एक Magento उत्पाद संग्रह फ़िल्टर करने की आवश्यकता है। संग्रह लोड करते समय Magento डिफ़ॉल्ट रूप से अक्षम उत्पादों को अनदेखा करता है।अक्षम उत्पादों सहित Magento लोड उत्पाद संग्रह

तो वहाँ मेरे सवाल का दो भागों हैं:

1 - मैं कैसे Magento केवल विकलांग उत्पादों युक्त एक संग्रह लोड कर सकते हैं? 2 - संग्रह में संग्रहित उत्पादों को Magento क्यों लोड नहीं कर रहा है?

मैं संग्रह लोड करने के लिए मानक कोड का उपयोग कर रहा:

$collction = Mage::getModel('catalog/product')->getCollection() 

इस विकलांग उत्पादों कभी नहीं लोड करता है।

उत्तर

7

आप उत्पाद फ्लैट संरचना का उपयोग करते हैं, तो

$col = Mage::getModel('catalog/product')->getCollection(); 

फ्लैट तालिका (जैसे। catalog_product_flat_1) का उपयोग करेगा, और disabled उत्पादों है कि तालिका का हिस्सा नहीं हैं।

बदलें config Use Flat Catalog Product "नहीं" और आप सभी उत्पादों संग्रह में होगा करने के लिए: catalog-flat

यह इस तरह से सभी उत्पादों लोड होगा।

+0

का अक्षम संग्रह प्राप्त करने के लिए चाहते हैं यह मैं हूँ आधे रास्ते वहाँ गया। यह फ्लैट टेबल का उपयोग करना बंद कर दिया, लेकिन यह अभी भी 'mage_catalog_category_product' की जगह 'mage_catalog_category_product_index' तालिका में शामिल हो रहा है, इसलिए मुझे अभी भी अक्षम उत्पादों को नहीं मिल रहा है। –

+0

मुझे इसे '-> setStoreId (Mage_Core_Model_App :: ADMIN_STORE_ID) लागू करके काम कर रहा है। ऐसा करने के लिए आपको बस इतना करना होगा, लेकिन जब तक आप फ्लैट कैटलॉग उत्पाद का उपयोग बंद नहीं करते हैं, तब तक Magento इसका उपयोग करने की कोशिश करेगा जब इसे किसी त्रुटि को फेंकने और फेंकने की आवश्यकता न हो। तो मुझे उन्हें –

-5

यह आपके संग्रह को अक्षम उत्पादों द्वारा फ़िल्टर किया जाना चाहिए।

$products = Mage::getModel('catalog/product')->getCollection() 
     ->setStoreId(Mage::app()->getStore()->getId()) 
     ->addAttributeToFilter('status', '0'); 
+4

दोनों का एक साथ उपयोग करना पड़ा, सबसे पहले, अक्षम स्थिति '2' है। दूसरा, अक्षम उत्पाद संग्रह में नहीं हैं, इसलिए फ़िल्टरिंग मदद नहीं करता है। –

+0

अक्षम उत्पादों की स्टॉट "2" है और '0' नहीं है – Mohamed23gharbi

2

तुम वापस कार्यालय में अपने config बदलने के लिए नहीं करना चाहते हैं (अच्छे प्रदर्शन रखने के लिए), मैं इस समाधान है कि मूल्य सिर्फ आपके अनुरोध संसाधित किया जाता है बदल जाता है, पाया क्योंकि मैं विकलांग उत्पादों केवल चाहते हैं एक विशेष समारोह के लिए:

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0); 

आप पहली बार जब आप फोन करने से पहले यह स्थापित करने के लिए:

Mage::getModel('catalog/product')->getCollection() 

मैं आप इसे वापस एक ही अनुरोध के दौरान निर्धारित नहीं कर सकते 1 को देखा, समर्थक सौभाग्य से क्योंकि संग्रह मॉडल स्टोर इस ध्वज को स्मृति में रखता है।

इस तरह, मेरे डेटाबेस में कॉन्फ़िगरेशन नहीं बदला गया था।

0

फ्लैट उत्पाद सक्षम होने पर, आप बेहतर

$collection = Mage::getResourceModel('catalog/product_collection') 

प्रयोग करेंगे आप विकलांग और सक्षम उत्पादों को पुनः प्राप्त करने में सक्षम हो जाएगा।

इस उत्तर के लिए एक बेहतर विवरण के लिए देखें: एक बार जब आप अपने संग्रह आप उपयोग कर तालिका में शामिल हो सकते मिल https://magento.stackexchange.com/a/40001/32179

0

-> joinTable ('cayaloginventory/stock_item', 'product_id = ENTITY_ID', सरणी ('stock_status' = > 'is_in_stock'))

यह उस तालिका को लोड करेगा जो आपको स्टॉक में मौजूद उत्पादों के साथ चाहिए -> addAttributeToFilter ('status', array ('eq' => 1)) ... यह केवल उपलब्ध लोड होगा ..यदि आप 2

को अक्षम परिवर्तन स्थिति लोड करने के लिए सभी उत्पादों

 $collection = Mage::getModel('catalog/product') 
        ->getCollection() 
        ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock"))   
        ->addAttributeToFilter('status', array('eq' => 2));