2015-09-28 10 views
8

Ich habe ein ziemlich einzigartiges Problem.Sortieren von Produkten nach Kategorie (in der übergeordneten Kategorie Ansicht)

Ich habe ein Geschäft, in dem es mehrere Kategorien in einer Einrichtung wie diese

Sammlung
.... Shorts (Produkte: kleine 16 - ROT und kleine 20 - BLAU)
... . Kleid (Produkte: blau: 16, Grün 19)

Wenn ich Sammlung im Shop öffnen bekomme ich die Einzelteile so

Blau 16
Grün 19
kleine 16 - RED
kleine 20 - BLUE

Ich möchte meine Ausgabe wie folgt sein:

kleine 16 - RED
klein 20 - BLAU
Blau 16
Grün 19

Wie kann ich diese Ergebnisse erhalten? Es tut mir leid ich keinen Code zur Verfügung gestellt haben, wie ich habe keine Ahnung, wie ich dieses

Antwort

0

1 erstellen Beobachter auf catalog_block_product_list_collection Ereignis

<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 erstellen Klasse 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'); 
    } 
} 

wir hier Sammlung sortieren nach Kind Kategorienamen festlegen, können Sie es zur Kategorie-ID ändern oder ergänzen Sammlung irgendein Kategorieattribut und Sortierung nach diesem Attribut

->order('child_category_name DESC'); 

dies nur probieren, wie schnell sortierte Sammlung Produkt von untergeordneten Kategorien, können Sie natürlich Option in der Toolbar hinzufügen und Sammlung sortieren dynamisch

0

erreichen sollte ich denke, Sie sollten ein Attribut von Admin erstellen,

Erstellen Sie ein Attribut custom_order von Admin-> Katalog -> Attribute-> Attribute verwalten. Individuell

Satz in Produkliste Gebraucht = Yes für Sortierung in Produkliste Gebraucht = Ja

für jedes Produkt den Positionswert zuordnen.

Dann gehen Sie zu Admin-> Katalog-> Kategorien verwalten.

eine Kategorie auswählen, klicken Sie auf der Registerkarte Anzeigeeinstellungen,

Set „Standard Produkt Listing Sortieren nach“ custom_order

+0

Und wie/wo ich den Code für diese Sortierung zu machen? –

+0

Sie brauchen nicht zu codieren. Das Ergebnis wird standardmäßig in aufsteigender Reihenfolge abgerufen. – Supravat

+0

Ich muss müde gewesen sein, als ich gesehen habe, was du geantwortet hast - Entschuldigung. Das scheint wie viel Arbeit, wenn Produkte geändert werden, muss es eine Möglichkeit geben, dies entweder mit einem benutzerdefinierten Attribut oder etwas benutzerdefinierter zu machen –

1

ich etwas ähnlich.

Innerhalb von Magento admin können Sie manuell die Reihenfolge festlegen, in der die Produkte auf der Kategorieseite angezeigt werden.

  • Katalog -> Kategorien verwalten (wählen Sie Ihre Kategorie)
  • Unter der „Kategorie Produkte“ Registerkarte finden Sie eine Tabelle enthält alle in die Kategorie zugeordneten Produkte, auf der rechten Seite gibt es eine Spalte namens " Position". Hier geben Sie einen int-Wert ein, je niedriger die Zahl, desto höher das Produkt auf der Kategorieseite erscheint.