Frage

Beim Hinzufügen eines Produkts zu einer Kategorie kann ein Sortierbestellwert angegeben werden.

Bildgebung jetzt haben wir eine Kategorie "P" auf "Anker" und verschiedene Kategorien "C1" und "C2", die Kinder von "P" sind.

Wie ist die Reihenfolge dieser Produkte definiert, die nur in den Unterkategorien enthalten sind, sondern beim Öffnen der übergeordneten Kategorie angezeigt werden?

War es hilfreich?

Lösung

Sich ansehen Mage_Catalog_Model_Resource_Category_Indexer_Product::_refreshAnchorRelations speziell diese Zeilen:

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

cc und ce sind gleich catalog_category_entity Tisch und cp ist catalog_category_product Tisch.

Ein Produkt kann in mehr als einer Kinderkategorien stattfinden, sodass die Produktposition zwischen mehreren Werten ein Minimum liegt.
Grundsätzlich ist die Produktposition in der übergeordneten Kategorie das Minimum zwischen den Positionen relativ zu jeder Kategorien aus der Tabelle catalog_category_product folgt dieser Formel:

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

BEARBEITEN
Schlussfolgerung: Produkte in einer Kategorie mit einer höheren Position im Baum werden vor den folgenden angezeigt.

Andere Tipps

Wie Marius und Andreas vorschlugen, müssen Sie die neu schreiben Mage_Catalog_Model_Resource_Category_Indexer_Product Klasse, um die Komportierung von zu ändern _refreshAnchorRelations und reindexAll.

Zum _refreshAnchorRelations

Sie haben standardmäßig

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

Ändern Sie es für

'cp.position + 10000'

Zum reindexAll

Sie haben standardmäßig

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

Ändern Sie es für

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

Es wird also nur die Mindestproduktposition benötigen. Ich habe hinzugefügt + 10000 Weil einige unserer Kunden eine negative Position eingeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top