Не активная ссылка на открытой по ней страницы

Тема в разделе "Вопросы по работе с меню", создана пользователем baloon, 10.10.2009.

  1. Offline

    baloon Недавно здесь

    Регистрация:
    19.12.2008
    Сообщения:
    35
    Симпатии:
    1
    Пол:
    Мужской
    Как сделать, чтобы ссылка в меню стала неактивной, когда по ней перешел посетитель и находится на страницы, куда эта ссылка ведет?

    Раньше не обращал на это внимание, а сейчас захотелось так сделать. Кто знает, как осуществить?
     
  2.  
  3. asha7771
    Offline

    asha7771 Недавно здесь

    Регистрация:
    25.01.2009
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Женский
    Присоединяюсь. Подскажите, пожалуйста, где «искать». А то юзабилити совсем хромает
     
  4. tohas
    Offline

    tohas Недавно здесь

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Немного перефразирую вопрос: как в mod_mainmenu сделать так, чтобы активный пункт меню не являлся ссылкой?

    Подскажите, пожалуйста.
     
  5. stranik
    Offline

    stranik специалист

    Регистрация:
    03.12.2008
    Сообщения:
    548
    Симпатии:
    36
    Пол:
    Мужской
    В зависимости от меню
    смотрите здесь может поможет http://joomla-support.ru/post90910.html#post90910
    а вообще укажите тип меню
     
  6. tohas
    Offline

    tohas Недавно здесь

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    stranik, вопрос не в стилизации активной ссылки, с этим я разобрался. Вопрос в том, чтобы ссылку вообще убрать из активного пункта меню, оставить только название.

    Сейчас:

    Код (PHP):
    1. <ul class="menu">
    2. <li id="current" class="active"><a href="/center/events/announces"><span>Анонсы событий</span></a></li>
    3. <li><a href="/center/events/plan"><span>План мероприятий</span></a></li>
    4. <li><a href="/center/events/projects"><span>Наши проекты</span></a></li>
    5. </ul>


    А надо:

    Код (PHP):
    1. <ul class="menu">
    2. <li id="current" class="active"><span>Анонсы событий</span></li>
    3. <li><a href="/center/events/plan"><span>План мероприятий</span></a></li>
    4. <li><a href="/center/events/projects"><span>Наши проекты</span></a></li>
    5. </ul>
     
  7. DKraev
    Offline

    DKraev <i>(aka gft)</i>

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    216
    Пол:
    Мужской
    Я делал, но только для варианта, когда меню оформляется в стиле Legacy (просто ссылки). Может кому-нибудь пригодится.

    Итак, открываем файл modules/mod_mainmenu/legacy.php

    Примерно в 141 строке ищем:

    Код (PHP):
    1. $txt = '<a href="' . $mitem->url . '" class="' . $menuclass . '" ' . $id . '>' . $mitem->name . '</a>';


    Меняем его на:

    Код (PHP):
    1. if ($current_itemid == $mitem->id) { echo '<span ' . $id . '>' .$mitem->name. '</span>';}
    2. else $txt = '<a href="' . $mitem->url . '" class="' . $menuclass . '" ' . $id . '>' . $mitem->name . '</a>';


    Как сделать для списка - не знаю. Не проверял.
     
    Последнее редактирование: 14.06.2010
  8. DKraev
    Offline

    DKraev <i>(aka gft)</i>

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    216
    Пол:
    Мужской
    Для списка делаем так. Открываем файл /modules/mod_mainmenu/helper.php

    В районе 341 строки ищем:

    Код (PHP):
    1. case 0:
    2. // _top
    3. $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
    4. break;


    Меняем его на:

    Код (PHP):
    1. case 0:
    2. // _top
    3. if (JSite::getMenu()->getActive()->id == $item->id){
    4.     $data = $tmp->url.$image.$tmp->name;
    5. } else {
    6.     $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
    7. }
    8. break;


    Работает. Проверил.
     
    tohas нравится это.
  9. tohas
    Offline

    tohas Недавно здесь

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Да, работает. Спасибо, gft.

    Усложним задачу: как сделать то же самое, не исправляя исходник модуля?
     
  10. DKraev
    Offline

    DKraev <i>(aka gft)</i>

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    216
    Пол:
    Мужской
    А как поменять фильтр на машине не открывая капота? Никак, наверное? :)
     
  11. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Эх, а еще супер-CMS называется... :(
     
  12. tohas
    Offline

    tohas Недавно здесь

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    То, что касается представления модуля, можно переопределять внутри шаблона. Там есть такой подкаталог html, ну, вы знаете. Вот я и думал: может, для helper.php можно что-то подобное сделать.

    Кстати, я тут ещё почесал голову, и немного усовершенствовал наш код (а именно условие ветвления):

    Код (PHP):
    1. case 0:
    2.                     // _top
    3.                     $active = JSite::getMenu()->getActive();
    4.  
    5.                     if ($active->id == $item->id || $item->type == 'menulink' && $item->query['Itemid'] == $active->id) { // menu item is active
    6.                         $data = $tmp->url.$image.$tmp->name; // no href
    7.                     } else {
    8.                         $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
    9.                     }
    10.                     break;


    Теперь все alias'ы активного пункта меню тоже перестают быть кликабельными.
     
  13. tohas
    Offline

    tohas Недавно здесь

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    У предложенного решения есть одно неприятное последствие. Оно проявляется, если в нашем меню есть ссылки на компонент 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/. Мне же нужно, чтобы на странице статьи эта ссылка была.

    Я не знаю, почему такое поведение имеет место. Видимо, так написан компонент. Если есть предложения о том, как исправить такое поведение либо обойти его (и вернуть ссылку), буду рад выслушать ваши мысли.
     

Поделиться этой страницей

Загрузка...