J'ai de sérieux problèmes avec Magento ici. Comme prévu, les éléments suivants:
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', array('eq' => 1));
Renvoie tous les produits activés pour mon $ category_id. Cependant ceci:
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', array('eq' => 0));
Ne renvoie pas les produits désactivés. Je n'arrive pas à trouver un moyen de retourner les produits désactivés, et je ne sais pas pourquoi.
J'ai essayé ça:
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Ce qui était censé avoir fonctionné, mais aurait peut-être été déprécié.
Est-ce que quelqu'un sait comment activer et désactiver tous les produits d'une catégorie?
Ne vous inquiétez pas, vous avez simplement été piégé par une définition constante très inhabituelle ^^. Essayez simplement:
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
'status',
array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED)
);
Pour quelque raison que ce soit, Varien a décidé de définir ce STATUS_DISABLED
constant avec une valeur de 2
, au lieu de la valeur plus intuitive (et couramment utilisée) de 0
.
Je pense que vous pouvez le faire en définissant le magasin par défaut comme
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
assurez-vous que vous enregistrez la valeur actuelle du magasin et la définissez après avoir fait ce qui précède.
Ou en utilisant un script extérieur à magento et en invoquant mage par
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');
Rien ne fonctionne si catalog_flat_product
est activé dans la configuration du backend-> catalogue.
essayez ceci ... cela donnera finalement tous les produits activés et désactivés
$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>";
}
c'est vraiment simple et après cela, vous pouvez facilement filtrer les produits par statut
Je n'ai pas trouvé de réponse en tant que telle à ma question ci-dessus. Mais j'ai gagné beaucoup de temps en utilisant une méthode différente.
J'ai exporté un CSV de tous les produits de mon Magento, supprimé toutes les colonnes sauf l'ID de catégorie et le SKU (c'est tout ce dont j'avais besoin), puis filtré cela pour renvoyer tous les skus à la place.
Si cela aide quelqu'un, voici le code -
<?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++;
}
Cette solution a été créée en utilisant une rubrique précédente sur le filtrage des CSV, ici
Donc pour l'instant, je peux survivre. cependant - une réponse à cette question est encore nécessaire!