Проблема с пагинацией в Virtuemart 3.2.12 Joomla 3.8.8

Короче, если перейти на вторую страницу пагинации в категории товаров, а затем в адресной строке вбить адрес категории (ну или нажать назад в браузере), окажется, что Вы вновь попадаете на вторую страницу пагинации, а должны по идее попасть на первую. Получается что бы попасть на первую страницу, нужно принудительно нажать на неё, что бы передался параметр limit=0. До сегодняшнего дня, я этого не замечал, а сегодня сделал бесконечную загрузку товаров и прям  это ударило в глаза.

Проблему решил примитивно, пришлось немного подправить ядро, а именно: /administrator/components/com_virtuemart/models/product.php

//We were already in the category/manufacturer, so we take the value stored in the session
$limitStartString = 'com_virtuemart.' . $view . 'c' . $cateid .'m'.$manid. '.limitstart';
$limitStart = $app->getUserStateFromRequest ($limitStartString, 'limitstart', vRequest::getInt ('limitstart', 0,'GET'), 'int');

Заменил на:

$uri = JUri::getInstance(); 
$url_string = $uri->toString();
$match_limit = strpos($url_string, 'start');

if ($match_limit) {
$limitStartString = 'com_virtuemart.' . $view . 'c' . $cateid .'m'.$manid. '.limitstart';
$limitStart = $app->getUserStateFromRequest ($limitStartString, 'limitstart', vRequest::getInt ('limitstart', 0,'GET'), 'int');
}
else {
$limitStart = vRequest::getInt ('limitstart', 0,'GET');
}

Комментариев: 4 на Проблема с пагинацией в Virtuemart 3.2.12 Joomla 3.8.8

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

проблему решил выключением SEF (ЧПУ), только вот теперь вопрос как сделать чтобы работало с включенными ЧПУ

Я переделал статью, так как первый способ для меня перестал работать правильно. Почему-то у меня вообще перестала работать пагинация потом.
Новый способ лучше.
Смысл такой: если в адресе нет слова «start» — принудительно показывает лимит 0, то есть первую страницу.

Я тоже решил вопрос, оставил как в статье написано, но при этом еще закоментировал в файле /components/com_virtuemart/router.php строки, где упоминается start и limitstart:

if ( isset($query[‘limitstart’] ) ) {
$limitstart = (int)$query[‘limitstart’] ;
unset($query[‘limitstart’]);
}
if ( isset($query[‘start’] ) ) {
$start = (int)$query[‘start’] ;
unset($query[‘start’]);
}
if ( isset($query[‘limit’] ) ) {
$limit = (int)$query[‘limit’] ;
unset($query[‘limit’]);
}
if ($start !== null && $limitstart!== null ) {
//$segments[] = $helper->lang(‘results’) .’,1-‘.$start ;
} else if ( $start>0 ) {
// using general limit if $limit is not set
if ($limit === null) $limit= vmrouterHelper::$limit ;

$segments[] = $helper->lang(‘results’) .’,’. ($start+1).’-‘.($start+$limit);
} else if ($limit !== null && $limit != vmrouterHelper::$limit ) $segments[] = $helper->lang(‘results’) .’,1-‘.$limit ;//limit change

и :

if ( $helper->compareKey($splitted[0] ,’results’)){
array_pop($segments);
$results = explode(‘-‘,$splitted[1],2);
//Pagination has changed, removed the -1 note by Max Milbers NOTE: Works on j1.5, but NOT j1.7
// limitstart is swapped by joomla to start ! See includes/route.php
if ($start = $results[0]-1) $vars[‘limitstart’] = $start;
else $vars[‘limitstart’] = 0 ;
$vars[‘limit’] = (int)$results[1]-$results[0]+1;

} else {
$vars[‘limitstart’] = 0 ;
if(vmrouterHelper::$limit === null){
vmrouterHelper::$limit = VmConfig::get(‘list_limit’, 20);
}
$vars[‘limit’] = vmrouterHelper::$limit;

}

Комментировать