2015-07-22 14 views
7

Ho un prodotto configurabile con prodotti semplici associati ad esso. Ex. Scarpa con attributi Dimensione e larghezza sul semplice.Filtri di navigazione stratificati Magento con Semplice configurabile

  1. Quando filtro per larghezza e dimensioni, mostra un configurabile anche se un prodotto semplice con dimensioni e larghezza non esiste.

L'ho già visto prima in numerose forme senza soluzioni. Qualcuno sa come risolvere questa funzionalità? Sono stupito di come questo non sia stato costruito fuori dagli schemi.

https://magento.stackexchange.com/questions/18001/shop-by-layered-navigation-configurable-products-not-filtering-correctly

Magento - Layered navigation, configurable products, multiple filters active issue

+0

Penso di avere la risposta a questo. In che modo la visibilità del prodotto è configurata per la configurazione e la semplicità? Sono entrambi visibili nel catalogo/ricerca o solo nel prodotto configurabile? – kais

+0

solo il configurabile. – David

+1

Non sembra che questo possa essere fatto facilmente senza modificare l'indicizzazione o danneggiare seriamente le prestazioni. In 'app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Attribute.php :: getCount' i collegamenti di navigazione a strati da recuperare utilizzano le tabelle di indice, che non includono i prodotti che non sono visibili individualmente. Dovresti quindi aggiungere alcune query aggiuntive per ottenere i prodotti semplici associati e verificare se esiste la combinazione di due (o più) attributi. Questo è dove la performance verrebbe uccisa, specialmente se si hanno molti attributi/valori. – kais

risposta

-1

si deve personalizzare il file core copiandolo nella directory/Mage locale.

Supponiamo che sia necessario variare le dimensioni & colore.

Aprire il file app\code\core\Mage\Catalog\Model\Layer.php

Dopo il seguente codice: -

$collection 
    ->addAttributeToSelect(
    Mage::getSingleton('catalog/config')->getProductAttributes() 
) 
    ->addMinimalPrice() 
    ->addFinalPrice() 
    ->addTaxPercents() 
    ->addUrlRewrite($this->getCurrentCategory()->getId()); 

Bisogna personalizzarlo per l'attributo selezionato: -

Ad esempio: -

if(isset($_GET['size'])) 
    { 
     $query = 'SELECT value FROM aw_layerednavigation_filter_option_eav WHERE name="title" AND option_id IN ('.$_GET['size'].')'; 
     $results = $readConnection->fetchAll($query); 
     $sizeLabels = array(); 
     foreach($results as $_r){ 
      $size_labels[] = $_r['value']; 
     } 

     $query = 'SELECT parent_id FROM advance_filter WHERE size IN ('.implode(",",$size_labels).') AND qty > 0'; 

     $results = $readConnection->fetchAll($query); 
     foreach($results as $_r){ 
      $size_prod_Ids[] = $_r['parent_id']; 
     } 
    } 
    $color_prod_Ids = array(); 
    if(isset($_GET['color'])) 
    { 
     $query = 'SELECT value FROM aw_layerednavigation_filter_option_eav WHERE name="title" AND option_id IN ('.$_GET['color'].')'; 
     $results = $readConnection->fetchAll($query); 
     $color_labels = array(); 
     foreach($results as $_r){ 
      $color_labels[] = strtoupper($_r['value']); 
     } 

     $query = 'SELECT parent_id FROM advance_filter WHERE color IN ("'.implode(",",$color_labels).'") AND qty > 0'; 

     $results = $readConnection->fetchAll($query); 
     foreach($results as $_r){ 
      $color_prod_Ids[] = $_r['parent_id']; 
     } 
    } 
    $productIds = array_merge($size_prod_Ids,$color_prod_Ids); 
    if(count($productIds) > 0){ 
     $collection->addAttributeToFilter('entity_id', array('in' => array_unique($productIds))); 
    } 

spero che questo possa aiutare .. !!

+0

da dove prendi queste tabelle nella tua query? – David

+0

@David Queste tabelle sono di un'estensione, ma è possibile sostituirle con le tabelle di base Magento. È solo intendo comprendere per risolvere i problemi. –