Как работает порядок сортировки продуктов в подкатегориях?

magento.stackexchange https://magento.stackexchange.com/questions/7500

  •  16-10-2019
  •  | 
  •  

Вопрос

При добавлении продукта в категорию можно указать значение заказа сортировки.

Изображение теперь у нас есть категория «P», установленная для «якоря» и различных категорий «C1» и «C2», которые являются Childs «P».

Как определяется порядок этих продуктов, которые находятся только в категориях, но отображаются при открытии родительской категории?

Это было полезно?

Решение

Взгляни на Mage_Catalog_Model_Resource_Category_Indexer_Product::_refreshAnchorRelations Особенно эти строки:

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

cc а также ce подобные catalog_category_entity стол и cp является catalog_category_product стол.

Продукт может быть в более чем одной категориях ребенка, поэтому положение продукта минимальна между несколькими значениями.
Таким образом, в основном позиция продукта в родительской категории является минимумом между позициями относительно каждой категории из таблицы catalog_category_product После этой формулы:

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

РЕДАКТИРОВАТЬ
Вывод: продукты в категории с положением выше в дереве будут показаны перед теми, которые ниже.

Другие советы

Как предложили Мариус и Андреас, вы должны переписать Mage_Catalog_Model_Resource_Category_Indexer_Product класс, чтобы изменить компромисс _refreshAnchorRelations а также reindexAll.

За _refreshAnchorRelations

У вас есть по умолчанию

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

изменить это для

'cp.position + 10000'

За reindexAll

У вас есть по умолчанию

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

изменить это для

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

Так что это займет только минимальную позицию продукта. я добавил + 10000 Потому что некоторые из наших клиентов входят в негативную позицию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top