Убрать ссылку с активного пункта меню Joomla

Считается что для SEO полезным является отсутствие ссылки на пункте меню, который в данный момент является активным. В одной из предыдущих заметок я предложил вариант как сделать правильные служебные значки с точки зрения SEO. А теперь посмотрим как можно реализовать вывод активного пункта меню текстом. т.е. без ссылки.

Так вот. Как известно, ссылки в модуле mod_mainmenu формируются в файле \modules\mod_mainmenu\helper.php, а именно с помощью функции _getItemData в следующих строчках:

switch ($tmp->browserNav)
{
	default:
	case 0:
		// _top
		$data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
		break;
	case 1:
		// _blank
		$data = '<a href="'.$tmp->url.'" target="_blank">'.$image.$tmp->name.'</a>';
		break;
	case 2:
		// window.open
		$attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$this->_params->get('window_open');
		// hrm...this is a bit dickey
		$link = str_replace('index.php', 'index2.php', $tmp->url);
		$data = '<a href="'.$link.'" onclick="window.open(this.href,\'targetWindow\',\''.$attribs.'\');return false;">'.$image.$tmp->name.'</a>';
		break;
}

Нас интересует только первый вариант.
Для решения задачи используем сравнение id активного пункта меню с id текущего пункта и меню и соответствующий вывод текста и ссылки (при совпадении и несовпадении):

case 0:
// _top
if (JSite::getMenu()->getActive()->id == $item->id){
	$data = $tmp->url.$image.$tmp->name;
} else {
	$data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
}
break;

Комментариев: 13

  • 21.11.2009 Фрекен Бокк:

    Спасибо! Ваш пост очень мне помог :)

    Всех благ вам, в развитии ресурса.

  • 19.01.2010 Владимир:

    выполнил ваши пожелания, но эффекта не заметил: в сеню попрежнему можно нажать на все ссылки. в чем может быть проблема?

  • 20.01.2010 Кирилл:

    Да, на данный момент трик работает только в модуле с «главным меню» (по умолчанию в joomla также есть «topmenu», «othermenu» и т.д.).

  • 31.08.2012 wemarus.ru:

    Спасибо, балгодаря статье нашел нужный отрывок кода, хотя задача у меня совсем другая. На все ссылки что находятся в li.parent повесить onclick!

  • 14.10.2012 Васил:

    у меня после подобной правки выдет следующую ошибку:

    Fatal error: Call to a member function name() on a non-object in /home/ndn/antiperspirant.in.ua/www/templates/10/html/mod_mainmenu/default.php on line 26

    • 14.10.2012 Кирилл:

      Привет, Васил. Скорее всего этот трюк не подходит под вашу версию Joomla, это делал на Joomla 1.5, точнее пока сказать не могу.

      • 15.10.2012 Васил:

        Спасибо за ответ.

        У меня 1.5 тоже...

        выяснилось что неработает на моем шаблоне, если включить стандартный то рботает

  • 03.12.2012 Андрей:

    у меня 1.5 joomla новый шаблон, данная тема не работает, очень прошу помочь с этим.

  • 25.02.2013 RE:

    Спасибо, помогло

  • 08.03.2013 Ирина:

    Спасибо, Ваша статья помогла решить мою проблему с выводом беграунда на разные пункты меню.

  • 02.04.2014 Петр:

    Данный способ работает в модуле ice_vertical_menu joomla 2.5. Изменять нужно файл menucore.php находится \modules\mod_ice_verticalmenu\libs

    изменить это (строка 595) :

    case 0:

    // _top

    $data = 'url.'">'.$image.$tmp->name.'';

    break;

    на вот это:

    case 0:

    // _top

    if (JSite::getMenu() ->getActive() ->id == $item->id){

    $data = 'url.'" class="'.$active_class.' '.$myClass.'">'.$image.$tmp->name.'';

    } else {

    $data = 'url.'" class="'.$active_class.' '.$myClass.'">'.$image.$tmp->name.'';

    }

    break;

    Активный пункт в меню не будет нажиматься и переходить.

  • 02.04.2014 Петр:

    блин код плохо вставляется-не которые элементы не выводятся(((


Добавление комментария:

 css.php