2011-07-11 9 views
21

द्वारा उत्पाद फ़िल्टर करें मुझे यहां कुछ गंभीर Magento समस्याएं हैं। जैसा कि अपेक्षित है:Magento: स्थिति

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', array('eq' => 1)); 

मेरे $ category_id के लिए सभी सक्षम उत्पादों को वापस कर देगा। हालांकि:

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', array('eq' => 0)); 

अक्षम उत्पादों को वापस नहीं करता है। मुझे अक्षम उत्पादों को वापस करने का कोई तरीका नहीं दिख रहा है, और मुझे नहीं पता कि क्यों।

मैं इस की कोशिश की है:

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 

कौन सा मतलब था काम किया, लेकिन जाहिरा तौर पर पदावनत किया गया हो सकता है।

क्या कोई जानता है कि किसी श्रेणी, सक्षम और अक्षम में सभी उत्पादों को कैसे प्राप्त किया जाए?

+3

द्वारा उत्पादों फ़िल्टर कर सकते हैं फ्लैट सूची के रूप में अक्षम अक्षम उत्पादों को केवल सक्षम उत्पादों को इकट्ठा करते हैं। –

+0

मुझे लगता है, क्या इस दौर में कोई रास्ता है? संपादित करें: मेरी सेटिंग्स में देखकर, फ्लैट कैटलॉग उत्पाद का उपयोग करें और फ्लैट कैटलॉग श्रेणी का उपयोग करें, नंबर पर सेट हैं। क्या इसका मतलब है कि मैं एक फ्लैट कैटलॉग का उपयोग नहीं कर रहा हूं? –

+0

वास्तव में, इसका मतलब है कि आप फ्लैट कैटलॉग का उपयोग नहीं कर रहे हैं ... –

उत्तर

42

द्वारा चिंता मत करो, आप बस एक बहुत ही असामान्य निरंतर परिभाषा ^^ में फंस गया। बस कोशिश:

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter(
    'status', 
    array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED) 
); 

जो कुछ के लिए कारणों Varien 0 की अधिक सहज ज्ञान युक्त (और आमतौर पर इस्तेमाल किया) मान की बजाय 2 के एक मूल्य के साथ इस STATUS_DISABLED लगातार परिभाषित करने के लिए फैसला किया।

+1

महान उत्तर! मेरे पास इसका परीक्षण करने के लिए समय नहीं है क्योंकि यह खड़ा है, लेकिन आपको लगता है कि यह काम करेगा। मैं इसे सही के रूप में चिह्नित करूंगा और बाद में इसका परीक्षण करूंगा! –

+3

लाइफसेवर! अक्षम = 2। कौन इसे थक गया होगा। – Sc0ttyD

+1

वास्तव में .... यह केवल तभी काम करेगा यदि आप फ्लैट टेबल का उपयोग नहीं कर रहे हैं। अक्षम उत्पादों को फ्लैट टेबल में शामिल नहीं किया गया है, और इसलिए किसी उत्पाद संग्रह से पुनर्प्राप्त नहीं किया जा सकता है। – Benubird

0

मुझे ऊपर दिए गए मेरे प्रश्न के उत्तर में कोई जवाब नहीं मिला है। लेकिन मैंने एक अलग विधि का उपयोग करके बहुत समय बचा लिया है।

मैंने अपने Magento में सभी उत्पादों का एक सीएसवी निर्यात किया, श्रेणी आईडी और एसकेयू (यह सब मुझे जरूरी है) को छोड़कर सभी कॉलम हटा दिए, और फिर फ़िल्टर किया कि बदले में सभी स्कस को वापस कर दिया जाए।

यह किसी को भी यहाँ मदद करता है कोड है -

<?php 
$file = fopen('allprods.csv', 'r'); 

// You can use an array to store your search ids, makes things more flexible. 
// Supports any number of search ids. 
$id = array($_GET['id']);  
// Make the search ids safe to use in regex (escapes special characters) 
$id = array_map('preg_quote', $id); 
// The argument becomes '/id/i', which means 'id, case-insensitive' 
$regex = '/'.implode('|', $id).'/i'; 

$skus = array(); 
while (($line = fgetcsv($file)) !== FALSE) { 
    list($ids, $sku) = $line; 

    if(preg_match($regex, $ids)) { 
     $skus[] = $sku; 
    } 
} 

$count = count($skus); 
$i = 1; 

echo $category_id; 
foreach ($skus as $sku){ 
    echo $sku; 
    if($i != $count) { echo "`"; } 
    $i++; 
} 

यह समाधान छानने CSV में के बारे में पिछले एक विषय का उपयोग करके बनाया गया था, here

तो अब के लिए, मैं जीवित रह सकते हैं। हालांकि - इस सवाल का जवाब अभी भी जरूरी है!

2

मुझे लगता है कि आप

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

तरह डिफ़ॉल्ट सुनिश्चित करें कि आप वर्तमान स्टोर मूल्य बचाने के लिए और इसे वापस सेट ऊपर करने के बाद बनाने की स्थापना की दुकान कर ऐसा कर सकते हैं।

या बाहर Magento से एक स्क्रिप्ट का उपयोग और दाना आह्वान द्वारा

require_once '../app/Mage.php'; 
$app = Mage::app(); 
Mage::register('isSecureArea', true); 
0

कुछ भी काम नहीं करता है अगर catalog_flat_product बैकएंड कॉन्फ़िगरेशन-> कैटलॉग में है।

इसे आजमाएं ..इस सभी उत्पादों सक्षम है और अंत में अक्षम

$collection = Mage::getResourceModel('catalog/product_collection'); //this will give you all products 
foreach($collection as $col) 
{ 
$var = Mage::getModel('catalog/product')->loadByAttribute('sku',$col->getSku()); 
echo"<pre>";print_r($var->getData());echo"</pre>"; 
} 

दे देंगे इसकी बहुत आसान है और इस के बाद आप आसानी से आप फ्लैट सूची का उपयोग कर रहे हैं, तो आप करने के लिए सक्षम नहीं होगा स्थिति

0
$products = Mage::getModel('catalog/category')->load($category_id) 
     ->getProductCollection() 
     ->addAttributeToSelect('*') 
     ->addAttributeToFilter('status', 1) 
     ->addAttributeToFilter('visibility', 4) 
     ->setOrder('price', 'ASC');