Joomla 1.5 sh404sef и пагинация в virtuemart

Тема в разделе "Joomla и SEF (ЧПУ)", создана пользователем SindBAD, 04.11.2010.

  1. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
    Всем привет!
    После установки sh404 в категориях virtuemart появился глюк - нельзя попасть на предыдущие страницы, если перешёл на следующую. Ссылки вроде формируются правильно, но после перехода открывается та же страница, которая и была открыта.
    Например: находимся на 4-й странице, открываем 2-ю, а открывается 4-я. Открываем 5-ю - она открывается, но 4-ю открыть уже нельзя.
    И при этом во время первого перехода в категорию ссылки пагинации выглядят по-старому.

    Плюс ещё проблема при сортировке: не срабатывает сортировка по имени. Сама ссылка выводится нормально, но при переходе ЧПУ отрезает часть параметров.

    Для примера: http://www.kubirubi.ru/knigi.html
     
  2.  
  3. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Проблема с пагинацией в VM 1.1.5 - решение на форуме sh404
     
  4. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
  5. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
    Частично решил проблему с помощью такой вот доработки плагина.

    Вставляем в файл component/com_sh404sef/sef_ext/com_virtuemart.php после объявления всех функций (после конструкции if (!function_exists('vmSefGetProductName')){ ... }, уменя - строка 95):

    Код (PHP):
    1. // Detect where a menu item with a non-standard Itemid is being processed and simulate a VM internal 'menu' item to facilitate pagination
    2. global $sess;
    3. if( !isset($sess) ) {
    4.  require_once( JPATH_ROOT.DS.'components'.DS.'com_virtuemart'.DS.'virtuemart_parser.php' );
    5. }
    6. $vm_Itemid = $sess->getShopItemid();
    7. // Check whether the Itemid is the usual value for a VM menu item
    8. if( $Itemid != $vm_Itemid ) {
    9.  // The URL is based on a menu item other than the standard VM menu item (usually the home page)
    10.  // VM always uses the standard VM Itemid value in pagination URLs and so this URL will be updated to
    11.  // use the standard Itemid and to incorporate any menu item parameters, in case pagination is appropriate.
    12.  $menu = & shRouter::shGetMenu();
    13.  $menuItem = $menu->getItem( $Itemid );
    14.  if( $menuItem ) {
    15.   // Get the menu parameter set
    16.   $menuparams =& new JParameter( $menuItem->params );
    17.   // Replicate the logic used by VM to assess whether a browse or product detail page required
    18.   $tmp_product_id = $menuparams->get( 'product_id' );
    19.   $tmp_category_id = $menuparams->get( 'category_id' );
    20.   // Get the page name and remove '.php', if present
    21.   $tmp_page = preg_replace('/\.php/', '', strtolower($menuparams->get( 'page' )));
    22.   if( !empty($tmp_product_id) ) {
    23.    $default_page = 'shop.product_details';
    24.   } else if( !empty($tmp_category_id) ) {
    25.    $default_page = 'shop.browse';
    26.   } else {
    27.    $default_page = '';
    28.   }
    29.   $tmp_page = empty($tmp_page) ? $default_page : $tmp_page;
    30.   // Check whether the menu item is a browse page or product detail page (other pages are excluded
    31.   $allowed_pages = array(
    32.        'shop.browse',
    33.        'shop.product_details',
    34.        );
    35.   if( in_array($tmp_page, $allowed_pages) ) {
    36.    // Clear down the unwanted get vars from the $shGETVars array
    37.    $required_params = array(
    38.          'option',
    39.          'lang',
    40.          );
    41.    global $shGETVars;
    42.    foreach( $shGETVars as $param ) {
    43.     if( !in_array($param, $required_params) ) {
    44.      unset($$param);
    45.      unset($shGETVars[$param]);
    46.     }
    47.    }
    48.    // Reset the Itemid
    49.    $Itemid = $vm_Itemid;
    50.    shAddToGETVarsList( 'Itemid', $Itemid );
    51.  
    52.    // Replicate the logic used by VM to include specific parameter values
    53.    if( !empty($tmp_product_id) ) {
    54.     $product_id = $tmp_product_id;
    55.     shAddToGETVarsList( 'product_id', $product_id );
    56.    } else if( !empty($tmp_category_id) ) {
    57.     $category_id = $tmp_category_id;
    58.     shAddToGETVarsList( 'category_id', $category_id );
    59.    }
    60.    
    61.    $tmp_flypage = $menuparams->get('flypage');
    62.    if( ( !empty($tmp_product_id) || !empty($tmp_category_id) ) && !empty($tmp_flypage) ) {
    63.     $flypage = $tmp_flypage;
    64.     shAddToGETVarsList( 'flypage', $flypage );
    65.    }
    66.    
    67.    $page = $tmp_page;
    68.    shAddToGETVarsList( 'page', $page );
    69.  
    70.    // Process any other menu parameters not already processed
    71.    $params = $menuparams->toArray();
    72.    // Exclude system parameters and those already processed
    73.    $excluded_params = array(
    74.          'product_id',
    75.          'category_id',
    76.          'flypage',
    77.          'page',
    78.          'page_title',
    79.          'show_page_title',
    80.          'pageclass_sfx',
    81.          'menu_image',
    82.          'secure',
    83.          );
    84.    // Process each parameter
    85.    foreach( $params as $param => $value ) {
    86.     if( !in_array($param, $excluded_params) && $value != '' ) { // Note empty() is not used here because zero is valid
    87.      $$param = $value;
    88.      shAddToGETVarsList( $param, $value );
    89.      shRemoveFromGETVarsList( $param );
    90.     }
    91.    }
    92.   }
    93.  }
    94. }
    95.  
    96. // Set the page number for browse pages, if not already set
    97. if( !isset($limitstart) || !isset($limit) ) {
    98.  $my_page = explode('.', $page);
    99.  $pagename = isset($my_page[1]) ? $my_page[1] : '';
    100.  if( $pagename == 'browse' ) {
    101.   global $vm_mainframe, $mosConfig_list_limit;
    102.   if( !isset($limitstart) ) {
    103.    // VM stores a different default limitstart value for each different browse page. That value must be identified so that the URL
    104.    // is created for the expected page
    105.    // Store the 'current value' of limitstart so that it can be restored later
    106.    $save_limitstart = vmRequest::getVar('limitstart');
    107.    // Setting the 'current value' to null allows the stored value (if any) to be retrieved without it being overwritten by a
    108.    // 'current value' that is usually not applicable to that particular browse page
    109.    vmRequest::setVar( 'limitstart', null );
    110.    // Force a consistent value for category_id when empty
    111.    $category_id = empty($category_id) ? 0 : $category_id;
    112.    $limitstart = (int)$vm_mainframe->getUserStateFromRequest( "view{$keyword}{$category_id}{$pagename}limitstart", 'limitstart', 0 );
    113.    shAddToGETVarsList( 'limitstart', $limitstart );
    114.    // Restore the original 'current value' of limitstart
    115.    vmRequest::setVar( 'limitstart', $save_limitstart );
    116.   }
    117.   if( !isset($limit) ) {
    118.    // No need to save and restore values here because VM only uses one value globally
    119.    $limit = (int)$vm_mainframe->getUserStateFromRequest( "viewlistlimit{$page}", 'limit', $mosConfig_list_limit );
    120.    shAddToGETVarsList( 'limit', $limit );
    121.   }
    122.  }
    123. }
    124.  
    125. // Ensure that $limitstart is a multiple of $limit (this can occur if $limit was changed since $limitstart was set)
    126. if( isset($limitstart) && $limit > 0 ) {
    127.  $limitstart = floor($limitstart/$limit)*$limit;
    128.  shAddToGETVarsList( 'limitstart', $limitstart );
    129. }

    Затем заходим в админку, открываем настройки sh404, и на вкладке "Плагины" в секции "VirtueMart" ставим Using Items per page drop-down list - Да (даже если уже установлено!). Сохраняем настройки, очищаем кэш ссылок - всё работет.

    Осталось пофиксить сортировку товаров по имени.

    P.S.: Решил и проблему с сортировкой. Для этого в настройках sh404 на вкладке "Расширенные" нужно установить
    "301 перенаправление из не-Sef в SEF URL" - "Нет".
     
    Последнее редактирование: 07.11.2010
  6. dr.Splin
    Offline

    dr.Splin Недавно здесь

    Регистрация:
    09.06.2010
    Сообщения:
    37
    Симпатии:
    0
    Пол:
    Мужской
    Ребят, помогите с решением проблемы^
    При включении sh404SEF у меня перестает работать кнопка "Купить" в карточке товара, но в общем списке категории она еще работает. А если с вношу настройки sh404SEF благодаря которым и нужен этот компонент, то кнопка "купить" не работает вообще!

    Я уже с ног сбился, с самого утра с бубном пляшу.
     
  7. Offline

    cwert Недавно здесь

    Регистрация:
    25.11.2010
    Сообщения:
    12
    Симпатии:
    0
    Пол:
    Мужской
    подскажите плз это решение, очень нужно. устал искать ... что где поправить чтобы навигация норм работала с sh404sef
     
    Последнее редактирование модератором: 05.04.2014
  8. Offline

    roggi Недавно здесь

    Регистрация:
    30.07.2011
    Сообщения:
    20
    Симпатии:
    0
    Пол:
    Мужской
    День добрый! У меня joomla 1.5.22+virtuemart 1.1.9 поставил sh404sef несколько кликов работало отлично, далее начались проблемы. В категорию заходит только с главной страницы, т.е. если зашел в какую либо категорию или карточку товара, при клике другой категории из главного модуля выкидывает на 404, уже все изрыл, помогите или подскажите где искать... еще возникали ситуации, при заходе в корзину, при клике на оформить заказ выкидывало на главную....
     
  9. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    - в шаблоне Virtuemart (видимо стоит очень навороченный, скачанный с какого-нибудь варезника);
    - в модулях Virtuemart;
    - в самом Virtuemart :)
     

Поделиться этой страницей

Загрузка...