Magento: Filtrar productos por Estado


Estoy teniendo algunos problemas graves de Magento aquí. Como se esperaba lo siguiente:

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

Devolverá todos los productos habilitados para mi categor category_id. Sin embargo esto:

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

No devuelve productos deshabilitados. Parece que no puedo encontrar una manera de devolver productos deshabilitados, y no se por qué.

He intentado esto:

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);

Que estaba destinado a haber funcionado, pero aparentemente puede haber sido obsoleto.

¿Alguien sabe cómo obtener todos los productos en una categoría, habilitados y ¿discapacitado?

Author: Tristar Web Design, 2011-07-11

5 answers

No se preocupe, simplemente quedó atrapado por una definición constante muy inusual^^. Solo inténtalo:

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

Por cualquier razón, Varien decidió definir esta STATUS_DISABLED constante con un valor de 2, en lugar del valor más intuitivo (y comúnmente utilizado) de 0.

 43
Author: Jürgen Thelen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-12 14:03:57

Creo que puedes hacer esto configurando la tienda por defecto como

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

Asegúrese de guardar el valor actual de la tienda y volver a configurarlo después de hacer lo anterior.

O mediante el uso de un script desde fuera de magento e invocar mago por

require_once '../app/Mage.php';
$app = Mage::app();
Mage::register('isSecureArea', true);
 3
Author: Nasaralla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-11 15:26:30
$products = Mage::getModel('catalog/category')->load($category_id)
        ->getProductCollection()
        ->addAttributeToSelect('*') 
        ->addAttributeToFilter('status', 1) 
        ->addAttributeToFilter('visibility', 4) 
        ->setOrder('price', 'ASC'); 
 1
Author: Hassan Ali Shahzad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-15 13:01:42

No he encontrado una respuesta como tal a mi pregunta anterior. Pero he ahorrado mucho tiempo usando un método diferente.

Exporté un CSV de todos los productos en mi Magento, eliminé todas las columnas excepto el ID de categoría y el SKU (esto es todo lo que necesitaba), y luego lo filtré para devolver todos los sku en su lugar.

Si ayuda a alguien aquí es el código -

<?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++;
}

Esta solución se creó utilizando un tema anterior sobre el filtrado de CSV, aquí

Así que por ahora, puedo sobrevivir. sin embargo-una respuesta a esta pregunta todavía se necesita!

 0
Author: Tristar Web Design,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:21

Nada funciona si catalog_flat_product está activado en configuración de backend->catálogo.

Prueba esto..esto dará todos los productos habilitados y deshabilitados en última instancia

$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>";
}

Es realmente simple y después de esto puede filtrar fácilmente productos por estado

 0
Author: Kingshuk Deb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-11 19:42:44