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
E come/dove dovrei fare il codice per questo ordinamento? –
Non è necessario codice per voi. il suo risultato è come ordine crescente per impostazione predefinita. – Supravat
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 –