2013-02-26 22 views
5

Ho bisogno di filtrare una collezione di prodotti Magento dallo stato disabilitato. Magento sembra ignorare per impostazione predefinita i prodotti disabilitati durante il caricamento della raccolta.Magento load collection di prodotti compresi prodotti disabilitati

così ci sono due parti alla mia domanda:

1 - Come posso caricare una collezione in Magento contenente solo prodotti disabili? 2 - Perché Magento non carica i prodotti disabilitati nella raccolta per cominciare?

Sto usando il codice standard per caricare la raccolta:

$collction = Mage::getModel('catalog/product')->getCollection() 

questo non è mai carica prodotti disabili.

risposta

7

Se si utilizza la struttura piatta prodotto, quindi

$col = Mage::getModel('catalog/product')->getCollection(); 

userà la tavola piatta (ad es. catalog_product_flat_1), e disabled prodotti che non fanno parte di quel tavolo.

Cambiare la configurazione Use Flat Catalog Product su "NO" e avrete tutti i prodotti della collezione: catalog-flat

caricherà tutti i prodotti in questo modo.

+0

Questo mi ha fatto a metà strada. Ha smesso di usare la tabella piatta, ma si sta ancora unendo alla tabella 'mage_catalog_category_product_index' invece di' mage_catalog_category_product', quindi non riesco ancora a ottenere i prodotti disabilitati. –

+0

Ho funzionato applicando '-> setStoreId (Mage_Core_Model_App :: ADMIN_STORE_ID)'. Questo sarebbe tutto ciò che dovresti fare, ma a meno che tu non spegni Usa il Flat Catalog Product, Magento proverà ad usarlo quando non è previsto e genererà un errore. Quindi ho dovuto usarli entrambi insieme –

-5

Questo dovrebbe caricare la tua raccolta filtrata da prodotti disabilitati.

$products = Mage::getModel('catalog/product')->getCollection() 
     ->setStoreId(Mage::app()->getStore()->getId()) 
     ->addAttributeToFilter('status', '0'); 
+4

Prima di tutto, lo stato disabilitato è '2'. In secondo luogo, i prodotti disabilitati non sono inclusi nella raccolta, quindi il filtraggio non aiuta. –

+0

Gli stati dei prodotti disabilitati sono "2" e non "0" – Mohamed23gharbi

2

Se non si desidera modificare la configurazione nel back office (per mantenere buone prestazioni), ho trovato questa soluzione che cambia il valore proprio mentre la richiesta viene elaborata, perché voglio solo i prodotti con disabilità per una specifica funzione:

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0); 

è necessario impostare prima la prima volta che si chiama:

Mage::getModel('catalog/product')->getCollection() 

ho notato che non è possibile impostare di nuovo a 1 durante la stessa richiesta, pro perché il negozio del modello di raccolta mantiene questo flag in memoria.

In questo modo, la configurazione nel mio database non è stata modificata.

0

Con prodotto piatto abilitato, è meglio utilizzare

$collection = Mage::getResourceModel('catalog/product_collection') 

Sarete in grado di recuperare i prodotti disabili e abilitati.

Vedere questa risposta per una spiegazione migliore: https://magento.stackexchange.com/a/40001/32179

0

Una volta che ottenete la vostra collezione si possono aderire tabella utilizzando -> joinTable ('cayaloginventory/stock_item', 'product_id = ENTITY_ID', array ('stock_status' = > 'is_in_stock'))

Questo caricherà la tabella di cui avete bisogno con i prodotti disponibili, dopo aggiungere -> addAttributeToFilter ('stato', array ('eq' => 1)) ... questo caricherà solo DISPONIBILE ..se si desidera caricare modificare lo stato DISABILITA a 2

Per ottenere Raccolta disabili di tutti i prodotti

 $collection = Mage::getModel('catalog/product') 
        ->getCollection() 
        ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock"))   
        ->addAttributeToFilter('status', array('eq' => 2)); 
Problemi correlati