2011-07-11 96 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

我明白了,這有什麼辦法嗎? 編輯:查看我的設置,使用平面目錄產品和使用平面目錄類別設置爲no。這是否意味着我沒有使用平面目錄? –

+0

確實,這意味着你沒有使用平面目錄... –

回答

42

別擔心,您只需被困一個非常不尋常的常量定義^^。剛剛嘗試:

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

不論出於什麼原因瓦瑞恩決定與2一個值來定義的,而不是0更直觀(和常用)值這個STATUS_DISABLED不變。

+1

很棒的回答!我沒有時間對它進行測試,但你似乎知道它會起作用。我會將其標記爲正確的,稍後再進行測試! –

+3

救生員!禁用= 2。誰會搶劫它。 – Sc0ttyD

+1

實際上......這隻會在你不使用平板電腦時才起作用。殘疾人產品不包含在平面表中,因此無法從產品收集中檢索。 – Benubird

0

我還沒有發現我上面的問題的答案是這樣的。但我通過使用不同的方法節省了大量的時間。

我出口的所有產品在CSV Magento的我,除了刪除類別ID和SKU的所有列(這是我所需要的),然後過濾即返回所有的SKU來代替。

如果它可以幫助任何人在這裏是代碼 -

<?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');