Считается что для 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;