Как сделать, чтобы ссылка в меню стала неактивной, когда по ней перешел посетитель и находится на страницы, куда эта ссылка ведет? Раньше не обращал на это внимание, а сейчас захотелось так сделать. Кто знает, как осуществить?
Немного перефразирую вопрос: как в mod_mainmenu сделать так, чтобы активный пункт меню не являлся ссылкой? Подскажите, пожалуйста.
В зависимости от меню смотрите здесь может поможет http://joomla-support.ru/post90910.html#post90910 а вообще укажите тип меню
stranik, вопрос не в стилизации активной ссылки, с этим я разобрался. Вопрос в том, чтобы ссылку вообще убрать из активного пункта меню, оставить только название. Сейчас: Код (PHP): <ul class="menu"> <li id="current" class="active"><a href="/center/events/announces"><span>Анонсы событий</span></a></li> <li><a href="/center/events/plan"><span>План мероприятий</span></a></li> <li><a href="/center/events/projects"><span>Наши проекты</span></a></li> </ul> А надо: Код (PHP): <ul class="menu"> <li id="current" class="active"><span>Анонсы событий</span></li> <li><a href="/center/events/plan"><span>План мероприятий</span></a></li> <li><a href="/center/events/projects"><span>Наши проекты</span></a></li> </ul>
Я делал, но только для варианта, когда меню оформляется в стиле Legacy (просто ссылки). Может кому-нибудь пригодится. Итак, открываем файл modules/mod_mainmenu/legacy.php Примерно в 141 строке ищем: Код (PHP): $txt = '<a href="' . $mitem->url . '" class="' . $menuclass . '" ' . $id . '>' . $mitem->name . '</a>'; Меняем его на: Код (PHP): if ($current_itemid == $mitem->id) { echo '<span ' . $id . '>' .$mitem->name. '</span>';} else $txt = '<a href="' . $mitem->url . '" class="' . $menuclass . '" ' . $id . '>' . $mitem->name . '</a>'; Как сделать для списка - не знаю. Не проверял.
Для списка делаем так. Открываем файл /modules/mod_mainmenu/helper.php В районе 341 строки ищем: Код (PHP): case 0: // _top $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>'; break; Меняем его на: Код (PHP): 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; Работает. Проверил.
То, что касается представления модуля, можно переопределять внутри шаблона. Там есть такой подкаталог html, ну, вы знаете. Вот я и думал: может, для helper.php можно что-то подобное сделать. Кстати, я тут ещё почесал голову, и немного усовершенствовал наш код (а именно условие ветвления): Код (PHP): case 0: // _top $active = JSite::getMenu()->getActive(); if ($active->id == $item->id || $item->type == 'menulink' && $item->query['Itemid'] == $active->id) { // menu item is active $data = $tmp->url.$image.$tmp->name; // no href } else { $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>'; } break; Теперь все alias'ы активного пункта меню тоже перестают быть кликабельными.
У предложенного решения есть одно неприятное последствие. Оно проявляется, если в нашем меню есть ссылки на компонент Category Blog (а также, пожалуй, Section Blog, Category List и Section List). Открываемые в блоге полные версии статей будут отображены с вырезанными из меню ссылками, поскольку для них объект $active = JSite::getMenu()->getActive() будет полностью идентичен самому блогу. Иначе говоря, адрес http://site/section/category/ и http://site/section/category/article1/ будут иметь полностью идентичное меню! То есть меню без ссылки на http://site/section/category/. Мне же нужно, чтобы на странице статьи эта ссылка была. Я не знаю, почему такое поведение имеет место. Видимо, так написан компонент. Если есть предложения о том, как исправить такое поведение либо обойти его (и вернуть ссылку), буду рад выслушать ваши мысли.