2011-07-11 4 views
21

ここではMagentoに深刻な問題があります。次のように予想されます。Magento:ステータス別にフィルターをかける

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

my $ 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

で魔術師を呼び出すには、あなたは、単に非常に珍しい定数定義^^によって閉じ込められてしまった、心配しないでください。ただ、試してください:Varienではなく0のより直感的な(と一般的に使用される)値の、2の値で、このSTATUS_DISABLED定数を定義することを決定した何らかの理由から

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

を。

+1

偉大な答え!私はそれをテストする時間がありませんが、それは動作することを知っているようです。私は正しいとマークし、後でそれをテストします! –

+3

ライフセーバー!無効= 2。誰がそれをサックしていたでしょう。 – Sc0ttyD

+1

実際には、これはフラットテーブルを使用していない場合にのみ機能します。無効な製品はフラットテーブルには含まれていないため、製品コレクションから検索することはできません。 – Benubird

0

上記の質問に答えが見つかりませんでした。しかし、私は別の方法を使用して、多くの時間を節約しました。

Magentoのすべての製品のCSVをエクスポートし、カテゴリIDと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'); 
関連する問題