ここに深刻な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);
これは機能することを意味していましたが、廃止された可能性があります。
カテゴリ内のすべての製品を有効または無効にする方法を知っている人はいますか?
心配する必要はありません。非常に珍しい定数定義にとらわれているだけです^^。ちょうど試して:
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
'status',
array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED)
);
理由が何であれ、VarienはこのSTATUS_DISABLED
定数を、2
のより直感的な(そして一般的に使用される)値ではなく、0
の値で定義することにしました。
私はあなたがストアをデフォルトに設定することでこれを行うことができると思います
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
必ず現在のストア値を保存し、上記を実行した後に設定し直してください。
または、magentoの外部からスクリプトを使用して、mageを呼び出す
require_once '../app/Mage.php';
$app = Mage::app();
Mage::register('isSecureArea', true);
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4)
->setOrder('price', 'ASC');
バックエンド設定->カタログで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>";
}
本当にシンプルで、この後、ステータスで製品を簡単にフィルタリングできます
上記の質問に対する答えは見つかりませんでした。しかし、私は別の方法を使用して多くの時間を節約しました。
Magento内のすべての製品のCSVをエクスポートし、カテゴリーIDとSKU(これが必要なすべてです)を除くすべての列を削除してから、フィルターしてすべてのskusを返します。
それが誰かを助けるなら、ここにコードがあります-
<?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
今のところ、私は生き残ることができます。ただし、この質問への回答はまだ必要です!