Domanda

Quando si aggiunge un prodotto a una categoria, un valore di ordinamento può essere specificato.

Imaging ora abbiamo una Categoria "P" insieme a "Anchor" e varie categorie "C1" e "C2", che sono Childs di "P".

Come è l'ordine di quei prodotti definiti, che sono solo nelle categorie sub, ma visualizzata quando si apre categoria superiore?

È stato utile?

Soluzione

Date un'occhiata a Mage_Catalog_Model_Resource_Category_Indexer_Product::_refreshAnchorRelations specialmente queste righe:

$position = 'MIN('.
            $adapter->getCheckSql(
                'cp.category_id = ce.entity_id',
                'cp.position',
                '(cc.position + 1) * ('.$adapter->quoteIdentifier('cc.level').' + 1) * 10000 + cp.position'
            )
        .')';

cc e ce sono allo stesso tavolo catalog_category_entity e cp è tavolo catalog_category_product.

Un prodotto può essere in più di un bambino categorie in modo che la posizione di prodotto è un minimo tra più valori.
Quindi, in pratica la posizione del prodotto nella categoria superiore è il minimo tra le posizioni relative a ciascun categorie dal catalog_category_product tabella che segue questa formula:

(child category position + 1) * (child category level + 1) * 10000 + ( product position in catalog_category_product + 1)  

[EDIT]
Conclusione:. Prodotti in una categoria con una posizione più alta nella struttura verranno visualizzati prima di quelli al di sotto

Altri suggerimenti

Per quanto Marius e Andreas hanno suggerito, è necessario riscrivere la classe Mage_Catalog_Model_Resource_Category_Indexer_Product per cambiare il comportement di _refreshAnchorRelations e reindexAll.

Per _refreshAnchorRelations

Hai di default

'(cc.position + 1) * ('.$adapter->quoteIdentifier('cc.level').' + 1) * 10000 + cp.position'

cambiarlo per

'cp.position + 10000'

Per reindexAll

Hai di default

'('.$idxAdapter->quoteIdentifier('ce.position').' + 1) * '
.'('.$idxAdapter->quoteIdentifier('ce.level').' + 1 * 10000)'
.' + '.$idxAdapter->quoteIdentifier('cp.position')

cambiarlo per

'('.$idxAdapter->quoteIdentifier('cp.position').' + 10000)'

Quindi, ci vorrà solo la posizione del prodotto minimo. Ho aggiunto + 10000 perché alcuni dei nostri clienti immettere una posizione negativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top