Virtuemart 2.0 кэш категории и ошибки постраничной навигации

Virtuemart 2.0 кэш категории и ошибки постраничной навигации изображение поста

Итак, Virtuemart 2.0 стал интереснее, и удобнее. Но код еще достаточно сыроват (хоть вышло уже 18 версий). И ошибок в нем пруд пруди. Недавно столкнулся со следующей. Если включить кэш в Joomla 2.5, перейти в категорию товаров (например: женская обувь), пройтись по ее страничкам, рассматривая нужные позиции, а потом перейти в другую категорию (например: мужская обувь), и попробовать походить по ее постраничной навигации, возникает странная ситуация.

Часть страниц в постраничной навигации мужской обуви (второй категории) становится недоступной. Глюк наблюдается в том случае, когда Вы посетили в постраничной навигации страниц в первой категории меньше, чем во второй, то есть: в первой категории Virtumeart Вы обошли три страницы с товарами, а во второй категории Virtuemart страниц больше, чем три, и Вы пытаетесь перейти на пятую/шестую и так далее.

Кэш при этом включен, как и seo преобразование ссылок. Только вот при попытке перехода на страницу с большим номером в постраничной навигации во второй категории Вы будете перенаправлены на максимальный номер страницы, которую Вы посетили в первой категории.

Идем на пятую в категории два, а попадаем на третью. Идем на седьмую, а попадаем опять на третью. Такой же «адекватной» реакции добиваемся при переходе по ссылкам на страницу вперед, на последнюю страницу.

Пример: в предыдущей категории «Мужская Обувь» Вы посетили три страницы, максимальной была третья, теперь в категории «Женская Обувь» Вы пытаетесь перейти в постраничной навигации на 5-6-7 страницу, но для Вас будет открыта только третья! Удивительно! Если же выключить кэш, все становится на свои места.

А ведь ошибка серьезная, она может порядком навредить индексации товаров при обходе поисковым роботом из-за ошибочно работающей постраничной навигации с включенным кэшем. Глюк был выявлен на следующей платформе: Virtuemart 2.0.10, 2.0.12 – 2.0.16, PHP 5.3.11 (mod_php,fastcgi),mysql 5.1 +, Joomla 2.5.6 – 2.5.8, кэш включен, seo преобразование ссылок включено.

Варианты решения проблемы:

  • Выключить кэш – меня этот вариант не устраивает, так как в Virtuemart 2.0 по сравнению с Virtuemart 1.1.9 нагрузка на базу данных возросла. 470 – 500 запросов на страницу при 20 категориях и 30 товаров на страницу! Да что ж это такое!
  • Отключить кэш частично только для получения товаров на странице категории (тогда мы получим всего лишь 200 запросов на страницу, согласитесь, это не 500!). Что и было мною сделано.
  • Найти ошибку (мне пока так и не удалось найти ошибку в коде, которая провоцирует данное поведение. Хотя код был исследован довольно скрупулезно, и были применены ВСЕ подсказки и решения (дело в том, что на самом форуме virtuemart об этой проблеме знают еще с версии 2.0 RC, но добавлять в bug list не хотят, а найденные там решения самими пользователями не работают вообще).

Решение проблемы с постраничной навигацией и кэшем в категориях товаров в Virtuemart 2.0. Отключаем частично кэш для представления категорий. Заходим в файл \components\com_virtuemart\controllers\category.php

Ищем строку 57 или следующий код в функции public function display:

} else {
 // Display it all
$safeurlparams = array('virtuemart_category_id'=>'INT','virtuemart_manufacturer_id'=>'INT','virtuemart_currency_id'=>'INT','return'=>'BASE64','lang'=>'CMD','orderby'=>'CMD','limitstart'=>'CMD','order'=>'CMD','limit'=>'CMD');

После этой строки добавляем следующее:

$view  = JRequest::getCMD('view');
$cacshed = $view == 'category' ? false : true;

После этого следует строка:

parent::display(true, $safeurlparams);

Ее изменяем на:

parent::display($cacshed, $safeurlparams);

После этого пагинация в категориях на страницах листинга товаров в virtuemart 2.0 с включенным кэшем начинает вести себя нормально. Уважаемый читатель, если у Вас есть 100% решение этой проблемы, поделитесь со мною здесь.

Комментарии