我在这里遇到了一些严重的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);
这意味着有效,但显然可能已被弃用。
有没有人知道如何让所有产品进入某个类别,启用和停用?
答案 0 :(得分:45)
别担心,你只是被一个非常不寻常的恒定定义^^困住了。试试吧:
$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
的更直观(和常用)值。
答案 1 :(得分:3)
我认为您可以通过将商店设置为默认值
来实现此目的Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
确保保存当前商店值并在执行上述操作后将其设置回来。
或者使用magento外部的脚本并通过
调用magerequire_once '../app/Mage.php';
$app = Mage::app();
Mage::register('isSecureArea', true);
答案 2 :(得分:1)
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4)
->setOrder('price', 'ASC');
答案 3 :(得分:0)
我上面的问题没有找到答案。但是我通过使用不同的方法节省了很多时间。
我在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
创建的所以现在,我能活下来。但是 - 仍然需要回答这个问题!
答案 4 :(得分:0)
如果在后端配置 - &gt;目录中启用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>";
}
非常简单,之后您可以按状态轻松过滤产品