На самом деле проблем связанных с этим может быть очень много, но хотелось бы рассмотреть конкретный случай, связанный с одним из клиентом. Cитуация была следующая: во всех категориях стоял Price Filter, то есть стандартный бегунок, позволяющий отфильтровать товары по цене.
У клиента в одной из категорий были товары с нулевой ценой, из-за которых и начались все проблемы.
Blocklayered(так называется сам модуль) не берет во внимание товары с нулевой ценой, и при заходе на первую страницу мы видим, что найдено 22 товара и у нас еще 2 страницы впереди, а при переходе на вторую получается что товаров 8(товары с ценой больше нуля). Это происходит в результате того, что при переходе на вторую страницу обрабатывается значение фильтра по цене, которое всегда выше нуля.
Возможно, в 1.5 эта проблема решена, но в 1.4.9 и 1.4.10 эта проблема до сих пор оставалась.
Что нужно, чтобы решить данную проблему?
Открываем файл /modules/blocklayered/blocklayered.php
Ищем там функцию indexProductPrices (у меня это 1055 строка). В этой функции находим строчки
if ($price == 0) continue; |
И заменяем их на:
if ($price == 0) $min_price[$currency['id_currency']] = 0; |
Теперь ищем функцию getFilterBlock
В ней находим строчку
switch ($filter['type']) { case 'price': |
Ниже видим
'values' => array ('1' => 0), |
Меняем на
'values' => array ('0'=>0, '1' => 0), |
Еще ниже видим.
if (!$price_array['min']) { $price_array['min'] = $product['price_min']; $price_array['values'][0] = $product['price_min']; } elseif ($price_array['min'] > $product['price_min']) { $price_array['min'] = (int)$product['price_min']; $price_array['values'][0] = (int)$product['price_min']; } |
Заменяем на:
/*if (!$price_array['min']) { $price_array['min'] = $product['price_min']; $price_array['values'][0] = $product['price_min']; }*/ if ($price_array['min'] > $product['price_min']) { $price_array['min'] = (int)$product['price_min']; $price_array['values'][0] = (int)$product['price_min']; } |
Теперь осталось только переиндексировать цены и все должно работать, надеюсь моя статья вам помогла.
Пока искал решения нашел этот вопрос на баг-трекере