2015-09-28 12 views
8

Ho un problema piuttosto unico.Ordina prodotti per categoria (nella visualizzazione della categoria principale)

ho un negozio dove ci sono più categorie in una configurazione di questo tipo

Collection
.... Shorts (prodotti: piccoli 16 - Rosso e piccole 20 - BLU)
... . Dress (prodotti: blu: 16, verde 19)

Se apro Collection in negozio ho ottengono gli articoli come questo

.210

Blu 16
Verde 19
piccolo 16 - ROSSO
piccolo 20 - BLU

voglio che la mia uscita di essere in questo modo:

piccolo 16 - ROSSO
piccola 20 - BLU
blu 16
verde 19

Come posso ottenere questi risultati? Mi dispiace non ho fornito alcun codice, come non ho idea di come dovrei raggiungere questo

risposta

0

1 creare osservatore evento catalog_block_product_list_collection

<events> 
     <catalog_block_product_list_collection> 
      <observers> 
       <namespace_module> 
        <class> namespace_module/observer</class> 
        <method>collectionList</method> 
       </namespace_module > 
      </observers> 
     </catalog_block_product_list_collection> 
    </events> 

2 creare classe Namespace_Module_Model_Observer

class Namespace_Module_Model_Observer 
{ 
    public function collectionList($observer) 
    { 
     /** @var Mage_Catalog_Model_Category $currentCategory */ 
     $currentCategory = Mage::registry('current_category'); 

     $children = Mage::getResourceModel('catalog/category')->getChildrenIds($currentCategory); 
     if (!$children) { 
      return $this; 
     } 
     $children = implode(',', $children); 
     /** @var Mage_Catalog_Model_Resource_Product_Collection $collection */ 
     $collection = $observer->getCollection(); 

     $attr = $this->_getAttribute('name'); 

     $collection->getSelect() 
      ->join(
       array('c' => $this->_getResource()->getTableName('catalog_category_product')), 
       "c.product_id = e.entity_id AND c.category_id IN ($children)", 
       array('child_category_id' => 'category_id') 
       ) 
      ->join(
       array('ac' => $this->_getResource()->getTableName('catalog_category_entity_' . $attr['backend_type'])), 
       "c.category_id = ac.entity_id AND ac.attribute_id = {$attr['attribute_id']}", 
       array('child_category_name' => 'value') 
      ) 
     ->order('child_category_name DESC'); 

     return $this; 
    } 

    protected function _getAttribute($attributeCode, $static = true, $entityTypeId = 3) 
    { 
     $readAdapter = $this->_getReadAdapter(); 
     $select = $readAdapter->select() 
      ->from($this->_getResource()->getTableName('eav/attribute')) 
      ->reset(Zend_Db_Select::COLUMNS) 
      ->columns(array('attribute_id', 'backend_type')) 
      ->where('entity_type_id = ?', $entityTypeId) 
      ->where('attribute_code = ?', $attributeCode) 
      ->limit(1); 
     if (!$static) { 
      $select->where('backend_type != ?', 'static'); 
     } 

     $entityId = $readAdapter->query($select)->fetch(); 
     return $entityId; 
    } 

    protected function _getResource() 
    { 
     return Mage::getSingleton('core/resource'); 
    } 

    protected function _getReadAdapter() 
    { 
     return $this->_getResource()->getConnection('core_read'); 
    } 
} 

qui abbiamo fissato raccolta Ordina per nome categoria bambino, è possibile modificarlo in categoria id o aggiungere raccolta qualsiasi attributo di categoria e ordinare per questo attributo

->order('child_category_name DESC'); 

questo è solo un esempio di come ordinare rapidamente la raccolta del prodotto per categorie figlio, ovviamente è possibile aggiungere l'opzione nella barra degli strumenti e ordinare la raccolta dinamicamente

0

Penso che si dovrebbe creare un attributo da admin,

Creare un attributo custom_order da Amministrazione-> Catalogo -> Attributi-> Gestisci attributi.

set usato nel listato prodotto = Sì per l'ordinamento nel listato prodotto = Sì

assegnare il valore di posizione per ogni prodotto autonomamente.

Quindi passare a Admin-> Catalogo-> Gestisci categorie.

selezionare una categoria, fare clic sulla scheda Impostazioni display,

set "di default con schede di prodotti Sort By" custom_order

+0

E come/dove dovrei fare il codice per questo ordinamento? –

+0

Non è necessario codice per voi. il suo risultato è come ordine crescente per impostazione predefinita. – Supravat

+0

Devo essere stato stanco quando ho visto quello che hai risposto - mi dispiace. Sembra un sacco di lavoro quando i prodotti sono cambiati, ci deve essere un modo per farlo con un attributo personalizzato o qualcosa di più personalizzato –

1

faccio qualcosa di simile a questo.

All'interno dell'amministratore di Magento è possibile impostare manualmente l'ordine di visualizzazione dei prodotti nella pagina delle categorie.

  • Catalogo -> Gestisci categorie (selezionare la categoria)
  • Nella scheda "Categoria Prodotti" si vedrà una tabella contenente tutti i prodotti assegnati alla categoria, in fondo a destra c'è una colonna chiamata " Posizione". Qui è dove inserisci un valore int, minore è il numero più alto è il prodotto che appare nella pagina della categoria.
Problemi correlati