Interrogazione filtro attributi elenco prodotti


12

Ho aggiunto un filtro in Metodo _getProductCollection() della classe Mage_Catalog_Block_Product_List come segue.

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection->getSelect()->joinInner(
        array('cpe' => 'catalog_product_entity'),
        'e.entity_id = cpe.entity_id'
    ) 
    ->where("cpe.type_id = 'simple'"); 
    ...
}

Il codice sopra funziona alla versione 1.7 di Magento. Ma ogni volta che scrivo il seguente codice, dà

Colonna non trovata: 1054 Colonna sconosciuta 'e.type_id' in 'dove clausola'

errore.

Il codice (che non funziona).

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
        ->addAttributeToSelect('type_id')
        ->addAttributeToFilter('type_id','simple');
    ...
}

Ora le domande .

  1. Ci saranno conseguenze sulle prestazioni se uso il primo codice funzionante?
  2. c'è un altro modo per aggirare un filtro prodotto adeguato?

AGGIORNARE:

Ogni volta che applico il seguente codice e utilizzo il rwdtema, non ricevo alcun errore. Ma ogni volta che utilizzo il defaulttema utente , visualizzo l'errore di seguito,

Codice

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
         ->addAttributeToSelect('type_id')
         ->addAttributeToFilter('type_id','simple');
    ...
}

Errore

SQLSTATE [42S22]: Colonna non trovata: 1054 Colonna sconosciuta 'e.type_id' in 'dove clausola', la query era: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS range, COUNT (*) AS countFROM catalog_product_index_priceAS e INNER JOIN catalog_category_product_indexCOME cat_indexON cat_index.product_id = e.entity_id E cat_index.store_id = 1, cat_index.visibility IN (2, 4) E cat_index.category_id = '3' WHERE ( e. type_idIN ( 'semplice' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price NON È NULL) GRUPPO PER PIANO ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ORDINA PER PIANO ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ASC


quale versione di magento hai usato ?? * e hanno applicato patch di magento
Amit Bera

1
WTF? ora ha senso ... stavo provando un EE 1.14 su RWD, è inaccettabile, come può un tema di visualizzazione cambiare un'intera query anche peggio come può cambiare la tabella principale ... questo non potrebbe essere altro che un bug . Complimenti @Magento Learner!
MauroNigrele,

Esattamente, il tema della vista crea problemi. Grazie. Il codice dovrebbe essere indipendente da un tema
Magento Learner

Risposte:


0

Penso che:

$collection->addAttributeToFilter('type_id', array('eq' => 'simple');

Qualora funziona, non è necessario aggiungere type_idal selectdato è una catalog_product_entitycolonna e si è recuperata per impostazione predefinita. Suggerisco sempre di registrare la query finale per avere un'idea migliore di ciò che accade:

Mage.:log($collection->getSelectSql(true));

A proposito: il primo blocco di codice non ha alcun senso poiché si unisce la tabella principale ( catalog_product_entity) a se stessa.


"in Magento 1.7 hanno fatto un'ottimizzazione sul sql selezionato che viene utilizzato per le opzioni di filtro dei prezzi. Rimuovono la parte FROM sql (che è l'entità prodotto - che contiene l'attributo type_id) e rendono la tabella correlata price_index la principale - quella utilizzato nella parte FROM della query. Quindi, in sostanza, la tabella da cui vengono selezionati i dati non è più la tabella dell'entità del prodotto (perdi tutti gli attributi di base dei prodotti) la tabella principale diventa l'indice del prodotto. Questo è un aggiornamento di base che il team di Magento ha aggiunto a partire dalla versione 1.7 ". Fai riferimento a quanto segue
Magento Learner


1
wowow la mia colpa, per qualche ragione, stavo pensando nel metodo getCollection del backend block, quindi in questo scenario il tuo primo codice è ok Non sono sicuro che sia la soluzione migliore ma sembra essere ok. Siamo spiacenti
MauroNigrele il

@MagentoLearner sei sicuro di questo post? ho appena ricontrollato su un EE1.14 che ho installato e sto ancora usando catalog_product_entity come tabella principale, tranne quando hai impostato l'uso del catalogo flat (assolutamente consigliato) ma in entrambi i casi hai type_id presente nella selezione. Puoi registrare la query come ho scritto nella risposta originale?
MauroNigrele,

1
mmmm interessante ... ho anche controllato la query in un caso di ricerca e sta usando catalog_product_entity come tabella principale, forse il "team di magento" ha deciso di ripristinare tali modifiche. Non riesco a trovare nessun 1.7 installato per verificarlo, ma l'idea di cambiare la tabella principale di un'entità sembra una pessima decisione architettonica ... Bene, nota che hai appena rovinato il mio fine settimana, ora devo trovare e installare un CE1 .7 e guarda questa merda con i miei occhi ... mia moglie non sarà contenta di questo :)
MauroNigrele,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.