0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 4014 Просмотров
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Люди добрые, помоги, пожалуйста.
Есть сайт kids-storyточкару, на котором перестала работать пагинация. Точный момент и причины неизвестны.
Стоит Joomla 2.5.17; VirtueMart 2.0.18a; JoomSEF 4.5.1.
Отключалка SEO в магазине не помогает.
Отключение кеша не помогает.
В pagination.php шаблона сейчас:
Код
function pagination_list_footer($list)
{
$html = "<div class=\"list-footer\">\n";

$html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
$html .= $list['pageslinks'];
$html .= "\n<div class=\"counter\">".$list['pagescounter']."</div>";

$html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"".$list['limitstart']."\" />";
$html .= "\n</div>";

return $html;
}

function pagination_list_render($list)
{
// Initialize variables
$html = "<span class=\"pagination\">";
//$html .= '<span>&laquo;</span>'.$list['start']['data'];
$html .= $list['previous']['data'];

foreach( $list['pages'] as $page )
{
if($page['data']['active']) {
$html .= '<strong>';
}

$html .= $page['data'];

if($page['data']['active']) {
$html .= '</strong>';
}
}

$html .= $list['next']['data'];
//$html .= $list['end']['data'];
//$html .= '<span>&raquo;</span>';

$html .= "</span>";
return $html;
}

function pagination_item_active(&$item) {
return "<a class=\"link-text\" href=\"".$item->link."\" title=\"".$item->text."\"><span class=\"link-page\">".$item->text."</span></a>";
}

function pagination_item_inactive(&$item) {
return "<span class=\"inactive\"><span class=\"text\">".$item->text."</span></span>";
}
?>


В router.php в jooml`e (448-451 строки):
Код
			if ($start = $uri->getVar('start')) {
$uri->setVar('limitstart', (int) $start);
$uri->delVar('start');
}


Из более-менее имеющего отношение к магазину, дополнительно устанавливались jHackGuard; jQuery Easy (цепляет jQuery + jQuery UI v1.8-предпоследняя). Думал последний виноват - удалил, а толку нет. Почистил базу, сбросил кеш, убрал все упоминания об этом плагине - 0 реакции.
Перед этим сносил JoomSEF и вычищал систему от него руками - также эффекта равен нулю.
Пагинация работала всегда, непонятно что случилось. Такое ощущение, что конфликт библиотек происходит, знать бы только каких и где...

В общих настройках категории - материалы навигация включена.
« Последнее редактирование: 11.02.2014, 02:49:35 от virtulamer »
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #1 : 11.02.2014, 02:45:15 »
А вообще, пагинация завязана как то на jQuery? И если да, то как завязана?
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #2 : 11.02.2014, 12:36:24 »
Проблема появилась после переноса сайта на хост к nichost`у. Может какой-то модуль дополнительный надо включить?
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #3 : 11.02.2014, 20:00:16 »
Народ, хэлп пожалуйста. Хотя просто тыкните пальцем, что ковырять в JoomSEF`e?
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #4 : 12.02.2014, 21:01:24 »
Что я делаю не так, почему тишина-то? )
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #5 : 12.02.2014, 23:22:03 »
Цитировать
if ($start = $uri->getVar('start')) {
            $uri->setVar('limitstart', (int) $start);
            $uri->delVar('start');
}
это у вас роутер VirtueMart?
если в урлах заменить start на Limitstart то пагинация у вас работает ..

я так думаю что Joomla при формировании URL заменяет параметр limitstart на start,
а при разборе обратно в limitstart записывает. Могу предположить что где то при разборе
ошибка закралась посмотрите файл router.php в папке с компонентом virtuemart-а
« Последнее редактирование: 12.02.2014, 23:45:40 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #6 : 13.02.2014, 14:41:39 »
это у вас роутер VirtueMart?
если в урлах заменить start на Limitstart то пагинация у вас работает ..

я так думаю что Joomla при формировании URL заменяет параметр limitstart на start,
а при разборе обратно в limitstart записывает. Могу предположить что где то при разборе
ошибка закралась посмотрите файл router.php в папке с компонентом virtuemart-а

Код
<?php
if(  !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
 *
 * @package VirtueMart
 * @Author Kohl Patrick
 * @subpackage router
 * @copyright Copyright (C) 2010 Kohl Patrick - VirtueMart Team - All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * VirtueMart is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
 *
 * http://virtuemart.net
 */


function virtuemartBuildRoute(&$query) {

$segments = array();


$helper = vmrouterHelper::getInstance($query);
/* simple route , no work , for very slow server or test purpose */
if ($helper->router_disabled) {
foreach ($query as $key => $value){
if  ($key != 'option')  {
if ($key != 'Itemid') {
$segments[]=$key.'/'.$value;
unset($query[$key]);
}
}

}
return $segments;
}

if ($helper->edit) return $segments;

/* Full route , heavy work*/
// $lang = $helper->lang ;
$view = '';

$jmenu = $helper->menu ;

if(isset($query['langswitch'])) unset($query['langswitch']);

if(isset($query['view'])){
$view = $query['view'];
unset($query['view']);
}
switch ($view) {
case 'virtuemart';
$query['Itemid'] = $jmenu['virtuemart'] ;
break;
/* Shop category or VirtueMart view
All ideas are wellcome to improve this
because is the biggest and more used */
case 'category';
$start = null;
$limitstart = null;
$limit = null;

if ( isset($query['virtuemart_manufacturer_id'])  ) {
$segments[] = $helper->lang('manufacturer').'/'.$helper->getManufacturerName($query['virtuemart_manufacturer_id']) ;
unset($query['virtuemart_manufacturer_id']);

}
if ( isset($query['search'])  ) {
$segments[] = $helper->lang('search') ;
unset($query['search']);
}
if ( isset($query['keyword'] )) {
$segments[] = $query['keyword'];
unset($query['keyword']);
}
if ( isset($query['virtuemart_category_id']) ) {
if (isset($jmenu['virtuemart_category_id'][ $query['virtuemart_category_id'] ] ) )
$query['Itemid'] = $jmenu['virtuemart_category_id'][$query['virtuemart_category_id']];
else {
$categoryRoute = $helper->getCategoryRoute($query['virtuemart_category_id']);
if ($categoryRoute->route) $segments[] = $categoryRoute->route;
if ($categoryRoute->itemId) $query['Itemid'] = $categoryRoute->itemId;
}
unset($query['virtuemart_category_id']);
}
if ( isset($jmenu['category']) ) $query['Itemid'] = $jmenu['category'];


if ( isset($query['order']) ) {
if ($query['order'] =='DESC') $segments[] = $helper->lang('orderDesc') ;
unset($query['order']);
}

if ( isset($query['orderby']) ) {
$segments[] = $helper->lang('by').','.$helper->lang( $query['orderby']) ;
unset($query['orderby']);
}

// Joomla replace before route limitstart by start but without SEF this is start !
if ( isset($query['limitstart'] ) ) {
$limitstart = $query['limitstart'] ;
unset($query['limitstart']);
}
if ( isset($query['start'] ) ) {
$start = $query['start'] ;
unset($query['start']);
}
if ( isset($query['limit'] ) ) {
$limit = $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

return $segments;
break;
/* Shop product details view  */
case 'productdetails';

$virtuemart_product_id = false;
if (isset($jmenu['virtuemart_product_id'][ $query['virtuemart_product_id'] ] ) ) {
$query['Itemid'] = $jmenu['virtuemart_product_id'][$query['virtuemart_product_id']];
unset($query['virtuemart_product_id']);
unset($query['virtuemart_category_id']);
} else {
if(isset($query['virtuemart_product_id'])) {
if ($helper->use_id) $segments[] = $query['virtuemart_product_id'];
$virtuemart_product_id = $query['virtuemart_product_id'];
unset($query['virtuemart_product_id']);
}
if(empty( $query['virtuemart_category_id'])){
$query['virtuemart_category_id'] = $helper->getParentProductcategory($virtuemart_product_id);
}
if(!empty( $query['virtuemart_category_id'])){
$categoryRoute = $helper->getCategoryRoute($query['virtuemart_category_id']);
if ($categoryRoute->route) $segments[] = $categoryRoute->route;
if ($categoryRoute->itemId) $query['Itemid'] = $categoryRoute->itemId;
else $query['Itemid'] = $jmenu['virtuemart'];
} else {
$query['Itemid'] = $jmenu['virtuemart']?$jmenu['virtuemart']:@$jmenu['virtuemart_category_id'][0];
}
unset($query['virtuemart_category_id']);

if($virtuemart_product_id)
$segments[] = $helper->getProductName($virtuemart_product_id);
}
if (!count($query)) return $segments;
break;
case 'manufacturer';

if(isset($query['virtuemart_manufacturer_id'])) {
if (isset($jmenu['virtuemart_manufacturer_id'][ $query['virtuemart_manufacturer_id'] ] ) ) {
$query['Itemid'] = $jmenu['virtuemart_manufacturer_id'][$query['virtuemart_manufacturer_id']];
} else {
$segments[] = $helper->lang('manufacturers').'/'.$helper->getManufacturerName($query['virtuemart_manufacturer_id']) ;
if ( isset($jmenu['manufacturer']) ) $query['Itemid'] = $jmenu['manufacturer'];
else $query['Itemid'] = $jmenu['virtuemart'];
}
unset($query['virtuemart_manufacturer_id']);
} else {
if ( isset($jmenu['manufacturer']) ) $query['Itemid'] = $jmenu['manufacturer'];
else $query['Itemid'] = $jmenu['virtuemart'];
}
break;
case 'user';

if ( isset($jmenu['user']) ) $query['Itemid'] = $jmenu['user'];
else {
$segments[] = $helper->lang('user') ;
$query['Itemid'] = $jmenu['virtuemart'];
}

if (isset($query['task'])) {
//vmdebug('my task in user view',$query['task']);
if($query['task']=='editaddresscart'){
if ($query['addrtype'] == 'ST'){
$segments[] = $helper->lang('editaddresscartST') ;
} else {
$segments[] = $helper->lang('editaddresscartBT') ;
}
}

else if($query['task']=='editaddresscheckout'){
if ($query['addrtype'] == 'ST'){
$segments[] = $helper->lang('editaddresscheckoutST') ;
} else {
$segments[] = $helper->lang('editaddresscheckoutBT') ;
}
}

else if($query['task']=='editaddress'){

if (isset($query['addrtype']) and $query['addrtype'] == 'ST'){
$segments[] = $helper->lang('editaddressST') ;
} else {
$segments[] = $helper->lang('editaddressBT') ;
}
}
else {
$segments[] =  $helper->lang($query['task']);
}
/* if ($query['addrtype'] == 'BT' && $query['task']='editaddresscart') $segments[] = $helper->lang('editaddresscartBT') ;
elseif ($query['addrtype'] == 'ST' && $query['task']='editaddresscart') $segments[] = $helper->lang('editaddresscartST') ;
elseif ($query['addrtype'] == 'BT') $segments[] = $helper->lang('editaddresscheckoutST') ;
elseif ($query['addrtype'] == 'ST') $segments[] = $helper->lang('editaddresscheckoutST') ;
else $segments[] = $query['task'] ;*/

unset ($query['task'] , $query['addrtype']);
}
break;
case 'vendor';
/* VM208 */
if(isset($query['virtuemart_vendor_id'])) {
if (isset($jmenu['virtuemart_vendor_id'][ $query['virtuemart_vendor_id'] ] ) ) {
$query['Itemid'] = $jmenu['virtuemart_vendor_id'][$query['virtuemart_vendor_id']];
} else {
if ( isset($jmenu['vendor']) ) {
$query['Itemid'] = $jmenu['vendor'];
} else {
$segments[] = $helper->lang('vendor') ;
$query['Itemid'] = $jmenu['virtuemart'];
}
}
} else if ( isset($jmenu['vendor']) ) {
$query['Itemid'] = $jmenu['vendor'];
} else {
$segments[] = $helper->lang('vendor') ;
$query['Itemid'] = $jmenu['virtuemart'];
}
if (isset($query['virtuemart_vendor_id'])) {
//$segments[] = $helper->lang('vendor').'/'.$helper->getVendorName($query['virtuemart_vendor_id']) ;
$segments[] =  $helper->getVendorName($query['virtuemart_vendor_id']) ;
unset ($query['virtuemart_vendor_id'] );
}


break;
case 'cart';
if ( isset($jmenu['cart']) ) $query['Itemid'] = $jmenu['cart'];
else {
$segments[] = $helper->lang('cart') ;
$query['Itemid'] = $jmenu['virtuemart'];
}

break;
case 'orders';
if ( isset($jmenu['orders']) ) $query['Itemid'] = $jmenu['orders'];
else {
$segments[] = $helper->lang('orders') ;
$query['Itemid'] = $jmenu['virtuemart'];
}
if ( isset($query['order_number']) ) {
$segments[] = 'number/'.$query['order_number'];
unset ($query['order_number'],$query['layout']);
} else if ( isset($query['virtuemart_order_id']) ) {
$segments[] = 'id/'.$query['virtuemart_order_id'];
unset ($query['virtuemart_order_id'],$query['layout']);
}

//else unset ($query['layout']);
break;

// SEF only view
default ;
$segments[] = $view;


}

// if (!class_exists( 'VmConfig' )) require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart'.DS.'helpers'.DS.'config.php');
// vmdebug("case 'productdetails'",$query);

if (isset($query['task'])) {
$segments[] = $helper->lang($query['task']);
unset($query['task']);
}
if (isset($query['layout'])) {
$segments[] = $helper->lang($query['layout']) ;
unset($query['layout']);
}
// SEF the slimbox View
/* if (isset($query['tmpl'])) {
//if ( $query['tmpl'] = 'component') $segments[] = 'modal' ;
$segments[] = $query['tmpl'] ;
unset($query['tmpl']);
}*/
return $segments;
}

/* This function can be slower because is used only one time  to find the real URL*/
function virtuemartParseRoute($segments) {

$vars = array();
$helper = vmrouterHelper::getInstance();
if ($helper->router_disabled) {
$total = count($segments);
for ($i = 0; $i < $total; $i=$i+2) {
$vars[ $segments[$i] ] = $segments[$i+1];
}
return $vars;
}
if (empty($segments)) {
return $vars;
}
//$lang = $helper->lang ;
// revert '-' (Joomla change - to :) //
foreach  ($segments as &$value) {
$value = str_replace(':', '-', $value);
}

// $splitted = explode(',',$segments[0],2);
$splitted = explode(',',end($segments),2);

if ( $helper->compareKey($splitted[0] ,'results')){
// array_shift($segments);
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'] = $results[1]-$results[0]+1;

} else {
$vars['limitstart'] = 0 ;
$vars['limit'] = vmrouterHelper::$limit;

}

if (empty($segments)) {
$vars['view'] = 'category';
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
return $vars;
}

// $orderby = explode(',',$segments[0],2);
$orderby = explode(',',end($segments),2);
if (  $helper->compareKey($orderby[0] , 'by') ) {
$vars['orderby'] =$helper->getOrderingKey($orderby[1]) ;
// array_shift($segments);
array_pop($segments);

if (empty($segments)) {
$vars['view'] = 'category';
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
return $vars;
}
}
if (  $helper->compareKey(end($segments),'orderDesc') ){
$vars['order'] ='DESC' ;
array_pop($segments);
if (empty($segments)) {
$vars['view'] = 'category';
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
return $vars;
}
}

if ( $segments[0] == 'product') {
$vars['view'] = 'product';
$vars['task'] = $segments[1];
$vars['tmpl'] = 'component';
return $vars;
}

if (  $helper->compareKey($segments[0] ,'manufacturer') ) {
array_shift($segments);
$vars['virtuemart_manufacturer_id'] =  $helper->getManufacturerId($segments[0]);
array_shift($segments);
// OSP 2012-02-29 removed search malforms SEF path and search is performed
// $vars['search'] = 'true';
if (empty($segments)) {
$vars['view'] = 'category';
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
return $vars;
}

}
/* added in vm208 */
// if no Joomla link: vendor/vendorname/layout
// if Joomla link joomlalink/vendorname/layout
if (  $helper->compareKey($segments[0] ,'vendor') ) {
$vars['virtuemart_vendor_id'] =  $helper->getVendorId($segments[1]);
// OSP 2012-02-29 removed search malforms SEF path and search is performed
// $vars['search'] = 'true';
// this can never happen
if (empty($segments)) {
$vars['view'] = 'vendor';
$vars['virtuemart_vendor_id'] = $helper->activeMenu->virtuemart_vendor_id ;
return $vars;
}

}

if ( $helper->compareKey($segments[0] ,'search') ) {
$vars['search'] = 'true';
array_shift($segments);
if ( !empty ($segments) ) {
$vars['keyword'] = array_shift($segments);

}
$vars['view'] = 'category';
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
if (empty($segments)) return $vars;
}
if (end($segments) == 'modal') {
$vars['tmpl'] = 'component';
array_pop($segments);

}
if ( $helper->compareKey(end($segments),'askquestion') ) {
$vars = (array)$helper->activeMenu ;
$vars['task'] = 'askquestion';
array_pop($segments);

} elseif ( $helper->compareKey(end($segments),'recommend') ) {
$vars = (array)$helper->activeMenu ;
$vars['task'] = 'recommend';
array_pop($segments);

} elseif ( $helper->compareKey(end($segments),'notify') ) {
$vars = (array)$helper->activeMenu ;
$vars['layout'] = 'notify';
array_pop($segments);

}

if (empty($segments)) return $vars ;

// View is first segment now
$view = $segments[0];
if ( $helper->compareKey($view,'orders') || $helper->activeMenu->view == 'orders') {
$vars['view'] = 'orders';
if ( $helper->compareKey($view,'orders')){
array_shift($segments);

}
if (empty($segments)) {
$vars['layout'] = 'list';
}
else if ($helper->compareKey($segments[0],'list') ) {
$vars['layout'] = 'list';
array_shift($segments);
}
if ( !empty($segments) ) {
if ($segments[0] ='number')
$vars['order_number'] = $segments[1] ;
else $vars['virtuemart_order_id'] = $segments[1] ;
$vars['layout'] = 'details';
}
return $vars;
}
else if ( $helper->compareKey($view,'user') || $helper->activeMenu->view == 'user') {
$vars['view'] = 'user';
if ( $helper->compareKey($view,'user') ) {
array_shift($segments);
}

if ( !empty($segments) ) {
if (  $helper->compareKey($segments[0] ,'editaddresscartBT') ) {
$vars['addrtype'] = 'BT' ;
$vars['task'] = 'editaddresscart' ;
}
elseif (  $helper->compareKey($segments[0] ,'editaddresscartST') ) {
$vars['addrtype'] = 'ST' ;
$vars['task'] = 'editaddresscart' ;
}
elseif (  $helper->compareKey($segments[0] ,'editaddresscheckoutBT') ) {
$vars['addrtype'] = 'BT' ;
$vars['task'] = 'editaddresscheckout' ;
}
elseif (  $helper->compareKey($segments[0] ,'editaddresscheckoutST') ) {
$vars['addrtype'] = 'ST' ;
$vars['task'] = 'editaddresscheckout' ;
}
elseif (  $helper->compareKey($segments[0] ,'editaddressST') ) {
$vars['addrtype'] = 'ST' ;
$vars['task'] = 'editaddressST' ;
}
elseif (  $helper->compareKey($segments[0] ,'editaddressBT') ) {
$vars['addrtype'] = 'BT' ;
$vars['task'] = 'edit' ;
$vars['layout'] = 'edit' ;      //I think that should be the layout, not the task
}
elseif (  $helper->compareKey($segments[0] ,'edit') ) {
$vars['layout'] = 'edit' ;      //uncomment and lets test
}
else $vars['task'] = $segments[0] ;
}
return $vars;
}
else if ( $helper->compareKey($view,'vendor') || $helper->activeMenu->view == 'vendor') {
/* vm208 */
$vars['view'] = 'vendor';

if ( $helper->compareKey($view,'vendor') ) {
array_shift($segments);
if (empty($segments)) return $vars;
}
//$vars['virtuemart_vendor_id'] = array_shift($segments);//// already done
//array_shift($segments);
$vars['virtuemart_vendor_id'] =  $helper->getVendorId($segments[0]);
array_shift($segments);
if(!empty($segments)) {
if ( $helper->compareKey($segments[0] ,'contact') ) $vars['layout'] = 'contact' ;
elseif ( $helper->compareKey($segments[0] ,'tos') ) $vars['layout'] = 'tos' ;
elseif ( $helper->compareKey($segments[0] ,'details') ) $vars['layout'] = 'details' ;
} else $vars['layout'] = 'details' ;

return $vars;

}
else if ( $helper->compareKey($view,'cart') || $helper->activeMenu->view == 'cart') {
$vars['view'] = 'cart';
if ( $helper->compareKey($view,'cart') ) {
array_shift($segments);
if (empty($segments)) return $vars;
}
if ( $helper->compareKey($segments[0] ,'edit_shipment') ) $vars['task'] = 'edit_shipment' ;
elseif ( $helper->compareKey($segments[0] ,'editpayment') ) $vars['task'] = 'editpayment' ;
elseif ( $helper->compareKey($segments[0] ,'delete') ) $vars['task'] = 'delete' ;
elseif ( $helper->compareKey($segments[0] ,'checkout') ) $vars['task'] = 'checkout' ;
else $vars['task'] = $segments[0];
return $vars;
}

else if ( $helper->compareKey($view,'manufacturers') || $helper->activeMenu->view == 'manufacturer') {
$vars['view'] = 'manufacturer';

if ( $helper->compareKey($view,'manufacturers') ) {
array_shift($segments);
}

if (!empty($segments) ) {
$vars['virtuemart_manufacturer_id'] =  $helper->getManufacturerId($segments[0]);
array_shift($segments);
}
if ( isset($segments[0]) && $segments[0] == 'modal') {
$vars['tmpl'] = 'component';
array_shift($segments);
}
// if (isset($helper->activeMenu->virtuemart_manufacturer_id))
// $vars['virtuemart_manufacturer_id'] = $helper->activeMenu->virtuemart_manufacturer_id ;

vmdebug('my parsed URL vars',$vars);
return $vars;
}


/*
* seo_sufix must never be used in category or router can't find it
* eg. suffix as "-suffix", a category with "name-suffix" get always a false return
* Trick : YOu can simply use "-p","-x","-" or ".htm" for better seo result if it's never in the product/category name !
*/
/* if (substr(end($segments ), -(int)$helper->seo_sufix_size ) == $helper->seo_sufix ) {
vmdebug('$segments productdetail',$segments,end($segments ));*/
$last_elem = end($segments);
$slast_elem = prev($segments);
if ( (substr($last_elem, -(int)$helper->seo_sufix_size ) == $helper->seo_sufix)
|| ($last_elem=='notify' && substr($slast_elem, -(int)$helper->seo_sufix_size ) == $helper->seo_sufix) ) {

$vars['view'] = 'productdetails';
if($last_elem=='notify') {
$vars['layout'] = 'notify';
array_pop($segments);
}

if (!$helper->use_id ) {
$product = $helper->getProductId($segments ,$helper->activeMenu->virtuemart_category_id);
$vars['virtuemart_product_id'] = $product['virtuemart_product_id'];
$vars['virtuemart_category_id'] = $product['virtuemart_category_id'];
//vmdebug('View productdetails, using case !$helper->use_id',$vars,$helper->activeMenu);
}
elseif (isset($segments[1]) ){
$vars['virtuemart_product_id'] = $segments[0];
$vars['virtuemart_category_id'] = $segments[1];
//vmdebug('View productdetails, using case isset($segments[1]',$vars);
} else {
$vars['virtuemart_product_id'] = $segments[0];
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
//vmdebug('View productdetails, using case "else", which uses $helper->activeMenu->virtuemart_category_id ',$vars);
}



} elseif (!$helper->use_id && ($helper->activeMenu->view == 'category' ) )  {
$vars['virtuemart_category_id'] = $helper->getCategoryId (end($segments),$helper->activeMenu->virtuemart_category_id);
$vars['view'] = 'category' ;


} elseif (isset($segments[0]) && ctype_digit ($segments[0]) || $helper->activeMenu->virtuemart_category_id>0 ) {
$vars['virtuemart_category_id'] = $segments[0];
$vars['view'] = 'category';


} elseif ($helper->activeMenu->virtuemart_category_id >0 && $vars['view'] != 'productdetails') {
$vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
$vars['view'] = 'category';

} elseif ($id = $helper->getCategoryId (end($segments),$helper->activeMenu->virtuemart_category_id )) {

// find corresponding category . If not, segment 0 must be a view
$vars['virtuemart_category_id'] = $id;
$vars['view'] = 'category' ;
} else {
$vars['view'] = $segments[0] ;
if ( isset($segments[1]) ) {
$vars['task'] = $segments[1] ;
}
}

//vmdebug('Router vars',$vars);

return $vars;
}

class vmrouterHelper {

/* language array */
public $lang = null ;
public $langTag = null ;
public $query = array();
/* Joomla menus ID object from com_virtuemart */
public $menu = null ;

/* Joomla active menu( itemId ) object */
public $activeMenu = null ;
public $menuVmitems = null;
/*
  * $use_id type boolean
  * Use the Id's of categorie and product or not
  */
public $use_id = false ;

public $seo_translate = false ;
private $orderings = null ;
public static $limit = null ;
/*
  * $router_disabled type boolean
  * true  = don't Use the router
  */
public $router_disabled = false ;

/* instance of class */
private static $_instances = array ();

private static $_catRoute = array ();

public $CategoryName = array();
private $dbview = array('vendor' =>'vendor','category' =>'category','virtuemart' =>'virtuemart','productdetails' =>'product','cart' => 'cart','manufacturer' => 'manufacturer','user'=>'user');

private function __construct($instanceKey,$query) {

if (!$this->router_disabled = VmConfig::get('seo_disabled', false)) {

$this->seo_translate = VmConfig::get('seo_translate', false);
$this->setLangs($instanceKey);
if ( JVM_VERSION===1 ) $this->setMenuItemId();
else $this->setMenuItemIdJ17();
$this->setActiveMenu();
$this->use_id = VmConfig::get('seo_use_id', false);
$this->seo_sufix = VmConfig::get('seo_sufix', '-detail');
$this->seo_sufix_size = strlen($this->seo_sufix) ;
$this->edit = ('edit' == JRequest::getCmd('task') );
// if language switcher we must know the $query
$this->query = $query;
}

}

public static function getInstance(&$query = null) {

if (!class_exists( 'VmConfig' )) {
require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart'.DS.'helpers'.DS.'config.php');
VmConfig::loadConfig();
}

if (isset($query['langswitch']) ) {
if ($query['langswitch'] != VMLANG ) $instanceKey = $query['langswitch'] ;
unset ($query['langswitch']);

} else $instanceKey = VMLANG ;
if (! array_key_exists ($instanceKey, self::$_instances)){
self::$_instances[$instanceKey] = new vmrouterHelper ($instanceKey,$query);

if (self::$limit===null){
$mainframe = Jfactory::getApplication(); ;
$view = 'virtuemart';
if(isset($query['view'])) $view = $query['view'];
self::$limit= $mainframe->getUserStateFromRequest('com_virtuemart.'.$view.'.limit', VmConfig::get('list_limit', 20), 'int');
// self::$limit= $mainframe->getUserStateFromRequest('global.list.limit', 'limit', VmConfig::get('list_limit', 20), 'int');
}
}
return self::$_instances[$instanceKey];
}

/* multi language routing ? */
public function setLangs($instanceKey){
$langs = VmConfig::get('active_languages',false);
if(count($langs)> 1) {
if(!in_array($instanceKey, $langs)) {
$this->vmlang = VMLANG ;
$this->langTag = strtr(VMLANG,'_','-');
} else {
$this->vmlang = strtolower(strtr($instanceKey,'-','_'));
$this->langTag= $instanceKey;
}
} else $this->vmlang = $this->langTag = VMLANG ;
$this->setLang($instanceKey);
$this->Jlang = JFactory::getLanguage();
}

public function getCategoryRoute($virtuemart_category_id){

$cache = JFactory::getCache('_virtuemart','');
$key = $virtuemart_category_id. $this->vmlang ; // internal cache key
if (!($CategoryRoute = $cache->get($key))) {
$CategoryRoute = $this->getCategoryRouteNocache($virtuemart_category_id);
$cache->store($CategoryRoute, $key);
}
return $CategoryRoute ;
}
/* Get Joomla menu item and the route for category */
public function getCategoryRouteNocache($virtuemart_category_id){
if (! array_key_exists ($virtuemart_category_id . $this->vmlang, self::$_catRoute)){
$category = new stdClass();
$category->route = '';
$category->itemId = 0;
$menuCatid = 0 ;
$ismenu = false ;

// control if category is Joomla menu
if (isset($this->menu['virtuemart_category_id'])) {
if (isset( $this->menu['virtuemart_category_id'][$virtuemart_category_id])) {
$ismenu = true;
$category->itemId = $this->menu['virtuemart_category_id'][$virtuemart_category_id] ;
} else {
$CatParentIds = $this->getCategoryRecurse($virtuemart_category_id,0) ;
/* control if parent categories are Joomla menu */
foreach ($CatParentIds as $CatParentId) {
// No ? then find the parent menu categorie !
if (isset( $this->menu['virtuemart_category_id'][$CatParentId]) ) {
$category->itemId = $this->menu['virtuemart_category_id'][$CatParentId] ;
$menuCatid = $CatParentId;
break;
}
}
}
}
if ($ismenu==false) {
if ( $this->use_id ) $category->route = $virtuemart_category_id.'/';
if (!isset ($this->CategoryName[$virtuemart_category_id])) {
$this->CategoryName[$virtuemart_category_id] = $this->getCategoryNames($virtuemart_category_id, $menuCatid );
}
$category->route .= $this->CategoryName[$virtuemart_category_id] ;
if ($menuCatid == 0  && $this->menu['virtuemart']) $category->itemId = $this->menu['virtuemart'] ;
}
self::$_catRoute[$virtuemart_category_id . $this->vmlang] = $category;
}
return self::$_catRoute[$virtuemart_category_id . $this->vmlang] ;
}

/*get url safe names of category and parents categories  */
public function getCategoryNames($virtuemart_category_id,$catMenuId=0){

static $categoryNamesCache = array();
$strings = array();
$db = JFactory::getDBO();
$parents_id = array_reverse($this->getCategoryRecurse($virtuemart_category_id,$catMenuId)) ;

foreach ($parents_id as $id ) {
if(!isset($categoryNamesCache[$id])){
$q = 'SELECT `slug` as name
FROM  `#__virtuemart_categories_'.$this->vmlang.'`
WHERE  `virtuemart_category_id`='.(int)$id;

$db->setQuery($q);
$cslug = $db->loadResult();
$categoryNamesCache[$id] = $cslug;
$strings[] = $cslug;
} else {
$strings[] = $categoryNamesCache[$id];
}

}

if(function_exists('mb_strtolower')){
return mb_strtolower(implode ('/', $strings ) );
} else {
return strtolower(implode ('/', $strings ) );
}


}
/* Get parents of category*/
public function getCategoryRecurse($virtuemart_category_id,$catMenuId,$first=true ) {
static $idsArr = array();
if ($first==true) $idsArr = array();

$db = JFactory::getDBO();
$q = "SELECT `category_child_id` AS `child`, `category_parent_id` AS `parent`
FROM  #__virtuemart_category_categories AS `xref`
WHERE `xref`.`category_child_id`= ".(int)$virtuemart_category_id;
$db->setQuery($q);
$ids = $db->loadObject();
if (isset ($ids->child)) {
$idsArr[] = $ids->child;
if($ids->parent != 0 and $catMenuId != $virtuemart_category_id and $catMenuId != $ids->parent) {
$this->getCategoryRecurse($ids->parent,$catMenuId,false);
}
}
return $idsArr ;
}
/* return id of categories
* $names are segments
* $virtuemart_category_ids is Joomla menu virtuemart_category_id
*/
public function getCategoryId($slug,$virtuemart_category_id ){
$db = JFactory::getDBO();
$q = "SELECT `virtuemart_category_id`
FROM  `#__virtuemart_categories_".$this->vmlang."`
WHERE `slug` LIKE '".$db->getEscaped($slug)."' ";

$db->setQuery($q);
if (!$category_id = $db->loadResult()) {
$category_id = $virtuemart_category_id;
}

return $category_id ;
}

/* Get URL safe Product name */
public function getProductName($id){

static $productNamesCache = array();

if(!isset($productNamesCache[$id])){
$db = JFactory::getDBO();
$query = 'SELECT `slug` FROM `#__virtuemart_products_'.$this->vmlang.'`  ' .
' WHERE `virtuemart_product_id` = ' . (int) $id;
$db->setQuery($query);
$name = $db->loadResult();
$productNamesCache[$id] = $name ;
} else {
$name = $productNamesCache[$id];
}

return $name.$this->seo_sufix;
}

var $counter = 0;
/* Get parent Product first found category ID */
public function getParentProductcategory($id){

$virtuemart_category_id = 0;
$db = JFactory::getDBO();
$query = 'SELECT `product_parent_id` FROM `#__virtuemart_products`  ' .
' WHERE `virtuemart_product_id` = ' . (int) $id;
$db->setQuery($query);
/* If product is child then get parent category ID*/
if ($parent_id = $db->loadResult()) {
$query = 'SELECT `virtuemart_category_id` FROM `#__virtuemart_product_categories`  ' .
' WHERE `virtuemart_product_id` = ' . $parent_id;
$db->setQuery($query);

//When the child and parent id is the same, this creates a deadlock
//add $counter, dont allow more then 10 levels
if (!$virtuemart_category_id = $db->loadResult()){
$this->counter++;
if($this->counter<10){
$this->getParentProductcategory($parent_id) ;
}
}

}
$this->counter = 0;
return $virtuemart_category_id ;
}


/* get product and category ID */
public function getProductId($names,$virtuemart_category_id = NULL ){
$productName = array_pop($names);
$productName =  substr($productName, 0, -(int)$this->seo_sufix_size );
$product = array();
$categoryName = end($names);

$product['virtuemart_category_id'] = $this->getCategoryId($categoryName,$virtuemart_category_id ) ;
$db = JFactory::getDBO();
$q = 'SELECT `p`.`virtuemart_product_id`
FROM `#__virtuemart_products_'.$this->vmlang.'` AS `p`
LEFT JOIN `#__virtuemart_product_categories` AS `xref` ON `p`.`virtuemart_product_id` = `xref`.`virtuemart_product_id`
WHERE `p`.`slug` LIKE "'.$db->getEscaped($productName).'" ';
//$q .= " AND `xref`.`virtuemart_category_id` = ".(int)$product['virtuemart_category_id'];
$db->setQuery($q);
$product['virtuemart_product_id'] = $db->loadResult();
/* WARNING product name must be unique or you can't acces the product */

return $product ;
}

/* Get URL safe Manufacturer name */
public function getManufacturerName($virtuemart_manufacturer_id ){
$db = JFactory::getDBO();
$query = 'SELECT `slug` FROM `#__virtuemart_manufacturers_'.$this->vmlang.'` WHERE virtuemart_manufacturer_id='.(int)$virtuemart_manufacturer_id;
$db->setQuery($query);

return $db->loadResult();

}

/* Get Manufacturer id */
public function getManufacturerId($slug ){
$db = JFactory::getDBO();
$query = "SELECT `virtuemart_manufacturer_id` FROM `#__virtuemart_manufacturers_".$this->vmlang."` WHERE `slug` LIKE '".$db->getEscaped($slug)."' ";
$db->setQuery($query);

return $db->loadResult();

}
/* Get URL safe Manufacturer name */
public function getVendorName($virtuemart_vendor_id ){
$db = JFactory::getDBO();
$query = 'SELECT `slug` FROM `#__virtuemart_vendors_'.$this->vmlang.'` WHERE virtuemart_vendor_id='.(int)$virtuemart_vendor_id;
$db->setQuery($query);

return $db->loadResult();

}
/* Get Manufacturer id */
public function getVendorId($slug ){
$db = JFactory::getDBO();
$query = "SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vendors_".$this->vmlang."` WHERE `slug` LIKE '".$db->getEscaped($slug)."' ";
$db->setQuery($query);

return $db->loadResult();

}
/* Set $this-lang (Translator for language from VirtueMart string) to load only once*/
private function setLang($instanceKey){

if ( $this->seo_translate ) {
/* use translator */
$lang =JFactory::getLanguage();
$extension = 'com_virtuemart.sef';
$base_dir = JPATH_SITE;
$lang->load($extension, $base_dir);

}
}

/* Set $this->menu with the Item ID from Joomla Menus */
private function setMenuItemIdJ17(){

$home = false ;
$component = JComponentHelper::getComponent('com_virtuemart');

//else $items = $menus->getItems('component_id', $component->id);
//get all vm menus

$db = JFactory::getDBO();
$query = 'SELECT * FROM `#__menu`  where `link` like "index.php?option=com_virtuemart%" and client_id=0 and published=1 and (language="*" or language="'.$this->langTag.'")'  ;
$db->setQuery($query);
// vmdebug('setMenuItemIdJ17 q',$query);
$this->menuVmitems= $db->loadObjectList();
$homeid =0;
if(empty($this->menuVmitems)){
vmWarn(JText::_('COM_VIRTUEMART_ASSIGN_VM_TO_MENU'));
} else {

// Search  VirtueMart itemID in Joomla menu
foreach ($this->menuVmitems as $item) {
$linkToSplit= explode ('&',$item->link);

$link =array();
foreach ($linkToSplit as $tosplit) {
$splitpos = strpos($tosplit, '=');
$link[ (substr($tosplit, 0, $splitpos) ) ] = substr($tosplit, $splitpos+1);
}
//vmDebug('menu view link',$link);

//This is fix to prevent entries in the errorlog.
if(!empty($link['view'])){
$view = $link['view'] ;
if (array_key_exists($view,$this->dbview) ){
$dbKey = $this->dbview[$view];
}
else {
$dbKey = false ;
}

if ( isset($link['virtuemart_'.$dbKey.'_id']) && $dbKey ){
$this->menu['virtuemart_'.$dbKey.'_id'][ $link['virtuemart_'.$dbKey.'_id'] ] = $item->id;
}
elseif ($home == $view ) continue;
else $this->menu[$view]= $item->id ;

if ($item->home === 1) {
$home = $view;
$homeid = $item->id;
}
} else {
vmdebug('my item with empty $link["view"]',$item);
vmError('$link["view"] is empty');
}

}
}



// init unsetted views  to defaut front view or nothing(prevent duplicates routes)
if ( !isset( $this->menu['virtuemart']) ) {
if (isset ($this->menu['virtuemart_category_id'][0]) ) {
$this->menu['virtuemart'] = $this->menu['virtuemart_category_id'][0] ;
}else $this->menu['virtuemart'] = $homeid;
}
// if ( !isset( $this->menu['manufacturer']) ) {
// $this->menu['manufacturer'] = $this->menu['virtuemart'] ;
// }
// if ( !isset( $this->menu['vendor']) ) {
// $this->menu['manufacturer'] = $this->menu['virtuemart'] ;
// }

}

/* Set $this->menu with the Item ID from Joomla Menus */
private function setMenuItemId(){

$app = JFactory::getApplication();
$menus = $app->getMenu('site');
$component = JComponentHelper::getComponent('com_virtuemart');
$items = $menus->getItems('componentid', $component->id);

if(empty($items)){
vmWarn(JText::_('COM_VIRTUEMART_ASSIGN_VM_TO_MENU'));
} else {
// Search  VirtueMart itemID in Joomla menu
foreach ($items as $item) {
$view = $item->query['view'] ;
if ($view=='virtuemart') $this->menu['virtuemart'] = $item->id;
$dbKey = $this->dbview[$view];
if ( isset($item->query['virtuemart_'.$dbKey.'_id']) )
$this->menu['virtuemart_'.$dbKey.'_id'][ $item->query['virtuemart_'.$dbKey.'_id'] ] = $item->id;
else $this->menu[$view]= $item->id ;
}
}

// init unsetted views  to defaut front view or nothing(prevent duplicates routes)
if ( !isset( $this->menu['virtuemart'][0]) ) {
$this->menu['virtuemart'][0] = null;
}
if ( !isset( $this->menu['manufacturer']) ) {
$this->menu['manufacturer'] = $this->menu['virtuemart'][0] ;
}

}
/* Set $this->activeMenu to current Item ID from Joomla Menus */
private function setActiveMenu(){
if ($this->activeMenu === null ) {
//$menu = JSite::getMenu();
//$menu = JFactory::getApplication()->getMenu();
$app = JFactory::getApplication();
$menu = $app->getMenu('site');
if ($Itemid = JRequest::getInt('Itemid',0) ) {
$menuItem = $menu->getItem($Itemid);
} else {
$menuItem = $menu->getActive();
}

$this->activeMenu = new stdClass();
$this->activeMenu->view = (empty($menuItem->query['view']))? null : $menuItem->query['view'];
$this->activeMenu->virtuemart_category_id = (empty($menuItem->query['virtuemart_category_id']))? 0 : $menuItem->query['virtuemart_category_id'];
$this->activeMenu->virtuemart_product_id = (empty($menuItem->query['virtuemart_product_id']))? null : $menuItem->query['virtuemart_product_id'];
$this->activeMenu->virtuemart_manufacturer_id = (empty($menuItem->query['virtuemart_manufacturer_id']))? null : $menuItem->query['virtuemart_manufacturer_id'];
/* added in 208 */
$this->activeMenu->virtuemart_vendor_id = (empty($menuItem->query['virtuemart_vendor_id']))? null : $menuItem->query['virtuemart_vendor_id'];

$this->activeMenu->Component = (empty($menuItem->component))? null : $menuItem->component;
}

}

/*
* Get language key or use $key in route
*/
public function lang($key) {
if ($this->seo_translate ) {
$jtext = (strtoupper( $key ) );
if ($this->Jlang->hasKey('COM_VIRTUEMART_SEF_'.$jtext) ){
//vmdebug('router lang translated '.$jtext);
return JText::_('COM_VIRTUEMART_SEF_'.$jtext);
}
}
//vmdebug('router lang '.$key);
//falldown
return $key;
}

/*
* revert key or use $key in route
*/
public function getOrderingKey($key) {
if ($this->seo_translate ) {
if ($this->orderings == null) {
$this->orderings = array(
'p.virtuemart_product_id'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_ID'),
'product_sku' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SKU'),
'product_price' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_PRICE'),
'category_name' => JText::_('COM_VIRTUEMART_SEF_CATEGORY_NAME'),
'category_description'=> JText::_('COM_VIRTUEMART_SEF_CATEGORY_DESCRIPTION'),
'mf_name' => JText::_('COM_VIRTUEMART_SEF_MF_NAME'),
'product_s_desc' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_S_DESC'),
'product_desc' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_DESC'),
'product_weight' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_WEIGHT'),
'product_weight_uom'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_WEIGHT_UOM'),
'product_length' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_LENGTH'),
'product_width' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_WIDTH'),
'product_height' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_HEIGHT'),
'product_lwh_uom' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_LWH_UOM'),
'product_in_stock' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_IN_STOCK'),
'low_stock_notification'=> JText::_('COM_VIRTUEMART_SEF_LOW_STOCK_NOTIFICATION'),
'product_available_date'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_AVAILABLE_DATE'),
'product_availability'  => JText::_('COM_VIRTUEMART_SEF_PRODUCT_AVAILABILITY'),
'product_special' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SPECIAL'),
'created_on' => JText::_('COM_VIRTUEMART_SEF_CREATED_ON'),
// 'p.modified_on' => JText::_('COM_VIRTUEMART_SEF_MDATE'),
'product_name' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_NAME'),
'product_sales' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SALES'),
'product_unit' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_UNIT'),
'product_packaging' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_PACKAGING'),
'p.intnotes' => JText::_('COM_VIRTUEMART_SEF_INTNOTES'),
'ordering' => JText::_('COM_VIRTUEMART_SEF_ORDERING')
);
}
if ($result = array_search($key,$this->orderings )) {
return $result;
}
}
return $key;
}
/*
* revert string key or use $key in route
*/
public function compareKey($string, $key) {
if ($this->seo_translate ) {
if (JText::_('COM_VIRTUEMART_SEF_'.$key) == $string )
{
return true;
}

}
if ($string == $key) return true;
return false;
}
}

// pure php no closing tag

Код router.php
В папке шаблона еще лежит pagination.php

Код
<?php
/**
 * @version $Id: pagination.php 14401 2010-01-26 14:10:00Z louis $
 * @package Joomla
 * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

/**
 * This is a file to add template specific chrome to pagination rendering.
 *
 * pagination_list_footer
 * Input variable $list is an array with offsets:
 * $list[limit] : int
 * $list[limitstart] : int
 * $list[total] : int
 * $list[limitfield] : string
 * $list[pagescounter] : string
 * $list[pageslinks] : string
 *
 * pagination_list_render
 * Input variable $list is an array with offsets:
 * $list[all]
 * [data] : string
 * [active] : boolean
 * $list[start]
 * [data] : string
 * [active] : boolean
 * $list[previous]
 * [data] : string
 * [active] : boolean
 * $list[next]
 * [data] : string
 * [active] : boolean
 * $list[end]
 * [data] : string
 * [active] : boolean
 * $list[pages]
 * [{PAGE}][data] : string
 * [{PAGE}][active] : boolean
 *
 * pagination_item_active
 * Input variable $item is an object with fields:
 * $item->base : integer
 * $item->link : string
 * $item->text : string
 *
 * pagination_item_inactive
 * Input variable $item is an object with fields:
 * $item->base : integer
 * $item->link : string
 * $item->text : string
 *
 * This gives template designers ultimate control over how pagination is rendered.
 *
 * NOTE: If you override pagination_item_active OR pagination_item_inactive you MUST override them both
 */

function pagination_list_footer($list)
{
$html = "<div class=\"list-footer\">\n";

$html .= "\n<div class=\"limit\">".JText::_('Display Num').$list['limitfield']."</div>";
$html .= $list['pageslinks'];
$html .= "\n<div class=\"counter\">".$list['pagescounter']."</div>";

$html .= "\n<input type=\"hidden\" name=\"limitstart\" value=\"".$list['limitstart']."\" />";
$html .= "\n</div>";

return $html;
}

function pagination_list_render($list)
{
// Initialize variables
$html = "<span class=\"pagination\">";
//$html .= '<span>&laquo;</span>'.$list['start']['data'];
$html .= $list['previous']['data'];

foreach( $list['pages'] as $page )
{
if($page['data']['active']) {
$html .= '<strong>';
}

$html .= $page['data'];

if($page['data']['active']) {
$html .= '</strong>';
}
}

$html .= $list['next']['data'];
//$html .= $list['end']['data'];
//$html .= '<span>&raquo;</span>';

$html .= "</span>";
return $html;
}

function pagination_item_active(&$item) {
return "<a class=\"link-text\" href=\"".$item->link."\" title=\"".$item->text."\"><span class=\"link-page\">".$item->text."</span></a>";
}

function pagination_item_inactive(&$item) {
return "<span class=\"inactive\"><span class=\"text\">".$item->text."</span></span>";
}
?>

Пробовал убрать pagination.php - не помогло.
Пробовал заменить start на limitstart вот в этом куске кода:

Код
			// Joomla replace before route limitstart by start but without SEF this is start !
if ( isset($query['limitstart'] ) ) {
$limitstart = $query['limitstart'] ;
unset($query['limitstart']);
}
if ( isset($query['start'] ) ) {
$start = $query['start'] ;
unset($query['start']);
}
if ( isset($query['limit'] ) ) {
$limit = $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

return $segments;
break;
не помогло.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #7 : 13.02.2014, 15:49:46 »
нет там не надо ничего менять, нормальный роутер у вас. Я посмотрел у себя как он урлы формирует, если он видит start или limit то он формирует URL вида results,x-y где x это начальный элемент y-конечный. У вас на сайте почему он до этого процесса не доходит. Я бы для начало сделал проверку есть ли переменная start в запросе на 109 строчке:
Код: php
if ( isset($query['start'] ) ) {
  $start = $query['start'] ;
  echo $start;  //проверка
  exit();          //проверка
если все нормально то по идее должны отображатся циферки стартовых элементов при клике. Если нет(что конечно вероятнее всего) проверять дальше .. Но это такой программистский подход. У меня вобще подозрение что вам какой то SEF компонент вредит .
интернет-блог: http://websiteprog.ru
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #8 : 13.02.2014, 15:52:45 »
нет там не надо ничего менять, нормальный роутер у вас. Я посмотрел у себя как он урлы формирует, если он видит start или limit то он формирует URL вида results,x-y где x это начальный элемент y-конечный. У вас на сайте почему он до этого процесса не доходит. Я бы для начало сделал проверку есть ли переменная start в запросе на 109 строчке:
Код: php
if ( isset($query['start'] ) ) {
  $start = $query['start'] ;
  echo $start;  //проверка
  exit();          //проверка
если все нормально то по идее должны отображатся циферки стартовых элементов при клике. Если нет(что конечно вероятнее всего) проверять дальше .. Но это такой программистский подход. У меня вобще подозрение что вам какой то SEF компонент вредит .

Дык, JoomSEF 4.5.1. В нем и причина стопудов. Просто я не знаю куда копать в его сторону...
Только я его сносил, а толку 0. Снес, ручками убрал его следы из базы и все равно результат тот же.
« Последнее редактирование: 13.02.2014, 16:10:41 от virtulamer »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #9 : 13.02.2014, 16:09:14 »
Ну так отлючите его и стандартный SEF тоже отключите в настройках попробуйте
интернет-блог: http://websiteprog.ru
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #10 : 13.02.2014, 16:11:53 »
Ну так отлючите его и стандартный SEF тоже отключите в настройках попробуйте

JoomSEF отключал, не помогло. А стандартный - это какой? У virtuemart`a самого или Joomla?
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #11 : 13.02.2014, 16:14:36 »
Ну так отлючите его и стандартный SEF тоже отключите в настройках попробуйте

Отключил JoomSEF, каталог заработал. А как мне найти причину в sef`e? нужен он так то. До этого с ним все работало нормально.
Хотя может в новой версии что-то изменили.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #12 : 13.02.2014, 16:54:13 »
а вы найдете где он убирает переменную start из запроса, закоментируйте, или перепишите роутер VirtueMart. даже не знаю что лучше) наверное первое.
интернет-блог: http://websiteprog.ru
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #13 : 13.02.2014, 17:34:25 »
а вы найдете где он убирает переменную start из запроса, закоментируйте, или перепишите роутер VirtueMart. даже не знаю что лучше) наверное первое.

Как найти, как он убирает переменную? Какой примерно код искать по смыслу?
И как спасибо говорить?  ;)
« Последнее редактирование: 13.02.2014, 17:37:58 от virtulamer »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #14 : 13.02.2014, 17:53:46 »
вот нагугил что то похожие на вашу проблему: http://www.artio.net/support-forums/joomsef/community-support/joomsef-4/pagination-problem-start-and-limitstart-params
Может быть поможет вам эти решения, а так надо конечно смотреть компонент, у меня к сожалению на это времени нету. Вобще говоря я так понял от этих компонентов больше вреда чем пользы, так что лучше уж для ЧПУ свои роутеры писать или если навыков нету, нанимать программистов.
интернет-блог: http://websiteprog.ru
*

virtulamer

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #15 : 13.02.2014, 18:07:51 »
вот нагугил что то похожие на вашу проблему: http://www.artio.net/support-forums/joomsef/community-support/joomsef-4/pagination-problem-start-and-limitstart-params
Может быть поможет вам эти решения, а так надо конечно смотреть компонент, у меня к сожалению на это времени нету. Вобще говоря я так понял от этих компонентов больше вреда чем пользы, так что лучше уж для ЧПУ свои роутеры писать или если навыков нету, нанимать программистов.

Ок, спасибо, буду изучать :)
*

FeaMor

  • Захожу иногда
  • 76
  • 0 / 0
Re: Почти баян - пагинация в VirtueMart 2.0.18
« Ответ #16 : 08.07.2015, 13:29:06 »
Ничего не получилось (
Пока оставил следующее решение, закомментировал строки (449-450)
Код
//				$uri->setVar('start', (int) $limitstart);
// $uri->delVar('limitstart');

в функции _processBuildRules(&$uri) файла /includes/router.php
теперь в место "старт" в адресе "лимитстарт"
но хотелось бы найти решение со "стартом" именно
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart 3 Отображать только товары в наличии!

Автор GaziroFFka

Ответов: 4
Просмотров: 2110
Последний ответ 06.06.2023, 13:55:13
от Akeksandr
SP VirtueMart Category Search

Автор ve1006

Ответов: 10
Просмотров: 6043
Последний ответ 18.01.2023, 10:39:10
от AzMandius
Как вывести модуль в страницу VirtueMart?

Автор harddrop

Ответов: 11
Просмотров: 2889
Последний ответ 13.11.2022, 13:11:37
от Evgen Kulibin
Как правильно настроить покупку в VirtueMart?

Автор varella

Ответов: 1
Просмотров: 1259
Последний ответ 12.10.2022, 16:14:04
от varella
Не могу сохранить порядок категорий в VirtueMart 3.9.8 и 4

Автор Egoritch

Ответов: 0
Просмотров: 1292
Последний ответ 26.05.2022, 12:30:59
от Egoritch