blog

подписаться на обновления блога

4
Ноя

Ошибка навигатора Virtuemart

Столкнулся с таким косяком: при использовании стандартного модуля меню Joomla для вывода категорий виртумарта (тип пункта меню - Virtuemart), возникает ошибка в модуле breadcrumbs (Путь по сайту). Ошибка заключается в дублировании модулем категории два раза: к примеру вместо "Каталог - Плюшевые медведи - розовые" он пишет "Каталог - плюшевые медведи - розовые - плюшевые медведи - розовые". Немного полазив по буржуйским форумам нашел решение

Открываем файл administratorcomponentscom_virtuemartclassesmainframe.class.php, находим 390 строку и меняем

1
2
3
4
5
function vmAppendPathway( $pathway ) {  global $mainframe;
 
    // Remove the link on the last pathway item $pathway[ count($pathway) - 1 ]->link = '';
 
    if( vmIsJoomla('1.5') ) {       $cmsPathway =& $mainframe->getPathway();        foreach( $pathway AS $item) {           $item->link = str_replace('&', '&', $item->link);           // make sure that ' (apostrophe) is converted to '         $item->name = html_entity_decode( $item->name, ENT_QUOTES );                            $cmsPathway->addItem( $item->name, $item->link );       }   } else {        $tpl = vmTemplate::getInstance();       $tpl->set( 'pathway', $pathway );       $vmPathway = $tpl->fetch( 'common/pathway.tpl.php' );       $mainframe->appendPathWay( $vmPathway );    }}
function vmAppendPathway( $pathway ) {	global $mainframe;

	// Remove the link on the last pathway item	$pathway[ count($pathway) - 1 ]->link = '';

	if( vmIsJoomla('1.5') ) {		$cmsPathway =& $mainframe->getPathway();		foreach( $pathway AS $item) {			$item->link = str_replace('&', '&', $item->link);			// make sure that ' (apostrophe) is converted to '			$item->name = html_entity_decode( $item->name, ENT_QUOTES );							$cmsPathway->addItem( $item->name, $item->link );		}	} else {		$tpl = vmTemplate::getInstance();		$tpl->set( 'pathway', $pathway );		$vmPathway = $tpl->fetch( 'common/pathway.tpl.php' );		$mainframe->appendPathWay( $vmPathway );	}}

на

1
2
3
4
5
function vmAppendPathway( $pathway ) {      global $mainframe;
 
        // Remove the link on the last pathway item     $pathway[ count($pathway) - 1 ]->link = '';
 
        if( vmIsJoomla('1.5') ) {           $cmsPathway =& $mainframe->getPathway();/***** YZEDESIGN HACK ******/           $whatinpath=',';            foreach( $cmsPathway->_pathway as $tabpath ) {              $whatinpath.=','.$tabpath->name.',';            }/***** YZEDESIGN HACK ******/          foreach( $pathway AS $item) {               if (!stripos($whatinpath,','.$item->name.',')){ //********* YZEDESIGN HACK                  $cmsPathway->addItem( $item->name, str_replace('&', '&', basename($item->link)) );              }           }       } else {            $tpl = vmTemplate::getInstance();           $tpl->set( 'pathway', $pathway );           $vmPathway = $tpl->fetch( 'common/pathway.tpl.php' );           $mainframe->appendPathWay( $vmPathway );        }   }
function vmAppendPathway( $pathway ) {		global $mainframe;

		// Remove the link on the last pathway item		$pathway[ count($pathway) - 1 ]->link = '';

		if( vmIsJoomla('1.5') ) {			$cmsPathway =& $mainframe->getPathway();/***** YZEDESIGN HACK ******/			$whatinpath=',';			foreach( $cmsPathway->_pathway as $tabpath ) {				$whatinpath.=','.$tabpath->name.',';			}/***** YZEDESIGN HACK ******/			foreach( $pathway AS $item) {				if (!stripos($whatinpath,','.$item->name.',')){ //********* YZEDESIGN HACK					$cmsPathway->addItem( $item->name, str_replace('&', '&', basename($item->link)) );				}			}		} else {			$tpl = vmTemplate::getInstance();			$tpl->set( 'pathway', $pathway );			$vmPathway = $tpl->fetch( 'common/pathway.tpl.php' );			$mainframe->appendPathWay( $vmPathway );		}	}
Далее: ← Раньше:
  • http://tv-av.com.ua Дмитрий

    А как же быть, когда включен плагин vmSEF?

  • http://elv.su elvencedor

    С этим плагином не работал *CRAZY*

  • Nadya

    Спасибо за помощь. Но есть один недостаток, который возникает, если использовать этот хак: если выбирать товар, то путь к flypage не указывается, а обрывается на категории. Например, до использования хака у меня был путь к карточке товара был такой: Ручной инструмент -> лопаты -> лопаты -> товар №1 (лопаты дублировались), тепеть выводится только Ручной инструмент -> лопаты, а товар №1 теперь не появляется. Как можно это исправить?

  • http://elv.su elvencedor

    дело не в хаке, 100%
    где-то косяк в коде
    Возможно кстати что это из-за версии виртумарта: это хак под 1.1.4
    В общем тут много ньюансов, но приведенные мною исправления точно не обрезают путь — проверено не один раз :)

  • Nadya

    ОК спасибо буду искать. Версия Vm стоит 1.1.4 с Joomla 1.5.17

  • Nadya

    Я эту проблему победила. У нее есть еще одно решение. Можно обойтись без правки файла mainframe.class.php

    Достаточно заккоментировать в файлах shop.browse.php и shop.product_details.php строки подключающий pathway:

    // Set up the pathway
    // Retrieve the pathway items for this product’s category
    $category_list = array_reverse( $ps_product_category->get_navigation_list( $category_id ) );
    $pathway = $ps_product_category->getPathway( $category_list );

    и

    // Set up the CMS pathway
    $category_list = array_reverse( $ps_product_category->get_navigation_list($category_id) );
    $pathway = $ps_product_category->getPathway( $category_list );
    $vm_mainframe->vmAppendPathway( $pathway );

    И все бужет прекрасно отображаться, без задваиваний и не будет обрываться путь к flypage!

  • http://elv.su elvencedor

    Спасибо что поделилась! *THUMBS UP*

  • http://twitter.com/simalena tigra-uki

    привет!
    elvencedor и Nadya -спасибо за способы — они работают в 1.1.4. Но кстати говоря, в способе by Nadya есть один недочет: если использовать его, то путь к товарам при стандартном поиске (включенном плагине поиска для VM) неверен…а жаль.
    Ваш способ elvencedor отлично сработал на 1.1.4.
    А вот в 1.1.5.не хочет почему-то (на 1.1.6 не пробывала -он кстати вышел на днях). Если будут решения — поделитесь, пожалуйста.
    Спасибо за информативный блог :)

  • http://elv.su elvencedor

    велкам ;)
    я предпочитаю пользовать 1.1.4 потому как для него сразу оптимизирую сайты под большие каталоги (несколько тысяч товаров)

  • http://apples-web.org.ua/ tigra-uki

    elvencedor, а если можно тогда, поясните плиз: почему именно 1.1.4? У него есть какие-то преимущества? Поделитесь :)

  • http://elv.su elvencedor

    ну я де написал :) есть примочка чтобы оптимизировать его под большие каталоги. На 1.1.5 эта примочка еще не проверена. Да и вообще на новые версии виртумарта сразу переходить опасно — это уже чисто из опыта.

  • Nadya

    tigra-uki

    У меня стоит «advanced search form» — поиск осуществляет отлично по всем категориям.

    Возможно тебе что-то нужно править в коде поиска. Нужно вникать. Не помню уже, возможно у меня вначале тоже не совсем работал поиск, я, наверное, его корректиовала как-то. Не помню уже. Давно это было.

    Если бы ты кинул более подробное описание, примеры, скрины того, что у тебя некорректно работает, я бы и смогла помочь.

  • http://apples-web.org.ua/ tigra-uki

    to elvencedor: эт ничего что мы у Вас в блоге переписку затеяли?

    to Nadya:
    вот к примеру сайт (он сейчас в процессе доработки): kproekt.com.ua (Joomla 1.5.22+VM 1.1.5) Задаем в поиск «печь» и выдает товары — Печь пароконвекционная Unox XXC1004 (Сковороды опрокидные/Гастрономические печи Unox)
    а она совсем к сковородам не имеет отношения, а к пароконвектоматам.
    Может можно с Вами связаться как-то по аське или типа того? ;)

  • http://elv.su elvencedor

    нормуль :)

  • Nadya

    tigra-uki если я тебе сюда скину номер skype — info@apples-web.org.ua (взяла с твоего сайта), до тебя дойдет письмо?
    Не хочу в открытый доступ выкладывать, шифруюсь 8)

  • http://apples-web.org.ua/ tigra-uki

    to Nadya: да дойдет! кидай! :) спасибо! :)

    to elvencedor: плиз удалите часть нашей неактуальной для други переписки :)