Считается что для 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; |
Спасибо! Ваш пост очень мне помог
Всех благ вам, в развитии ресурса.
выполнил ваши пожелания, но эффекта не заметил: в сеню попрежнему можно нажать на все ссылки. в чем может быть проблема?
Да, на данный момент трик работает только в модуле с «главным меню» (по умолчанию в joomla также есть «topmenu», «othermenu» и т.д.).
Спасибо, балгодаря статье нашел нужный отрывок кода, хотя задача у меня совсем другая. На все ссылки что находятся в li.parent повесить onclick!
у меня после подобной правки выдет следующую ошибку:
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
Привет, Васил. Скорее всего этот трюк не подходит под вашу версию Joomla, это делал на Joomla 1.5, точнее пока сказать не могу.
Спасибо за ответ.
У меня 1.5 тоже...
выяснилось что неработает на моем шаблоне, если включить стандартный то рботает
у меня 1.5 joomla новый шаблон, данная тема не работает, очень прошу помочь с этим.
Спасибо, помогло
Спасибо, Ваша статья помогла решить мою проблему с выводом беграунда на разные пункты меню.
Данный способ работает в модуле 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;
Активный пункт в меню не будет нажиматься и переходить.
вот этот код я использовал в модуле ice_vertical_menu joomla 2.5:
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;
блин код плохо вставляется-не которые элементы не выводятся(((