Сортировка продуктов Magento 1.8 по цене неоднородна для отдельных и настраиваемых продуктов?


Взгляните на http://goo.gl/N2ZzzZ

Если я выполняю сортировку по цене, ASC или DESC, сортировка продуктов происходит повсюду (просто сравните значения в долларах).

Вероятно, потому, что некоторые продукты являются отдельными продуктами, а некоторые настраиваются с несколькими продуктами, определенными в них.

Я думаю, что Magento берет самый дорогой продукт в этих настраиваемых продуктах, а затем использует его для сортировки, но если я закажу продукты от min до макс, тогда все выключено.

Есть идеи, можно ли это как-то исправить?

Author: David Manners, 2014-09-19

1 answers

Я не могу дать вам четкого ответа, но я могу подсказать вам, с чего начать.
В списке продуктов используются цены из таблицы индекса цен catalog_product_index_price.
При сортировке по цене для сортировки используется столбец min_price.
Вы можете увидеть это в Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSort в разделе if($attribute == 'price'):

$this->addPriceData();
$this->getSelect()->order("price_index.min_price {$dir}");

Теперь сумасшедшая часть.
Таблица индекса цен заполняется индексатором.
Цена каждого вида товара рассчитывается немного по-разному.
Классы, которые вычисляют цены, расположены в app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Price. каждый класс соответствует типу продукта. Если для определенного типа продукта нет класса (например, виртуального), используется Default.php.
Для продуктов пакета используется класс app/code/core/Mage/Bundle/Model/Resource/Indexer/Price.php, а для загружаемых app/code/core/Mage/Downloadable/Model/Resource/Indexer/Price.php

У каждого класса есть метод, называемый reindexEntity. Это тот, кто делает грязную работу.
Этот метод вызывает различные методы в зависимости от типа продукта, которые вычисляют и извлекают цены.
В каждом классе (специально настраиваемом, сгруппированном и связанном) есть есть несколько огромных запросов, чтобы узнать цены.
К сожалению, я не могу толком объяснить, что делает каждый запрос, потому что на первый взгляд они кажутся мне драконами.
Но вы можете запускать процессы индексатора и регистрировать запросы и результаты, если хотите посмотреть, что они делают.
Кроме того, если вы хотите изменить процесс индексирования, вам необходимо изменить эти классы и методы. Но будьте очень осторожны.

 2
Author: Marius, 2014-09-25 12:00:49