Возникла необходимость сделать красивое переключение "Количество товаров на странице"
Открываем файл /administrator/components/com_virtuemart/classes/pageNavigation.class.php и в начале функции getLimitBox пишем:
$Itemid = vmGet( $_REQUEST, 'Itemid', null ); $manufacturer_id = vmGet( $_REQUEST, 'manufacturer_id', null ); $limit = vmGet( $_REQUEST, 'limit', null ); if($limit=='10000') $limit='Все'; if(empty($limit)) $limit='20'; $category_id = vmGet( $_REQUEST, 'category_id', null ); $link = $mm_action_url."index.php?option=com_virtuemart&Itemid=$Itemid&category_id=$category_id&page=shop.browse"; $link .= empty($manufacturer_id) ? '' : "&manufacturer_id=$manufacturer_id";
далее перед return $html;
пишем
$html=''; foreach ($limits as $key => $value) { if($limit==$value) {$class='limitbox active';} else {$class='limitbox';} $html .= '<a class="'.$class.'" href="'.$key.'">'.$value.'</a> '; }
В итоге мы получили выбор количества товаров на странице ссылками. Остается только оформить стилями по вкусу по ТЗ. Каждая сылка имеет класс 'limitbox', активная - 'limitbox active'.
Наслаждаемся...
P.S. Для того чтобы наш хак работал только на frontend и не ломал нам админку, функция должен выглядеть вот так:
/* @return string The html for the limit # input box */ function getLimitBox ( $link = '') { $limits = array(); if (vmGet( $_REQUEST, 'pshop_mode', null )=='admin') { if (!empty($link) && strpos( 'limitstart=', $link) === false) { // insert limitstart in url if missing $link .= '&limitstart='.$this->limitstart; } for ($i=5; $i <= 30; $i+=5) { if (empty( $link)) { $limits[$i] = $i; } else { $limits[vmRoute($link.'&limit='.$i)] = $i; } } if (empty( $link)) { $limits[50] = 50; } else { $limits[vmRoute($link.'&limit=50')] = 50; } // build the html select list if (empty( $link)) { $html = ps_html::selectList( 'limit', $this->limit, $limits, 1, '', 'onchange="this.form.submit();"' ); } else { $current = vmRoute($link.'&limit='.$this->limit); $html = ps_html::selectList( 'limit', $current, $limits, 1, '', 'onchange="location.href=this.value"' ); } $html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"$this->limitstart\" />"; } else { $Itemid = vmGet( $_REQUEST, 'Itemid', null ); $manufacturer_id = vmGet( $_REQUEST, 'manufacturer_id', null ); $limit = vmGet( $_REQUEST, 'limit', null ); if($limit=='10000') $limit='Все'; if(empty($limit)) $limit='20'; $category_id = vmGet( $_REQUEST, 'category_id', null ); $link = $mm_action_url."index.php?option=com_virtuemart&Itemid=$Itemid&category_id=$category_id&page=shop.browse"; $link .= empty($manufacturer_id) ? '' : "&manufacturer_id=$manufacturer_id"; if (!empty($link) && strpos( 'limitstart=', $link) === false) { $link .= '&limitstart='.$this->limitstart; } for ($i=20; $i <= 200; $i+=180) { $limits[vmroute($link.'&limit='.$i)] = $i; } $limits[vmroute($link.'&limit=10000')] = 'Все';//если у Вас в категории больше 10000 товаров - поставьте, соответственно, большее число if (empty( $link)) { $html = ps_html::selectList( 'limit', $this->limit, $limits, 1, '', 'onchange="this.form.submit();"' ); } else { $current = vmRoute($link.'&limit='.$this->limit); $html = ps_html::selectList( 'limit', $current, $limits, 1, '', 'onchange="location.href=this.value"' ); } $html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"$this->limitstart\" />"; $html=''; foreach ($limits as $key => $value) { if($limit==$value) {$class='limitbox active';} else {$class='limitbox';} $html .= '<a class="'.$class.'" href="'.$key.'">'.$value.'</a> '; } } return $html; }
Так как в тексте функции есть кириллические символы - обязательно сохраняем в кодировке UTF-8 без ВОМ
UPDATE
Добавил вложение с работающим вариантом с сайта http://goldnews.ru/