Как добавить класс "active" псевдониму пункта меню?

  • 10 Ответов
  • 6767 Просмотров

0 Пользователей и 4 Гостей просматривают эту тему.

*

Uman

  • ***
  • 37
  • 0
Друзья, есть 2 меню: одно обычное, другое содержит псевдонимы пунктов из первого меню.
При переходе на страницу, куда ведут одни и те же пункты двух меню, у основного меню активный пункт принимает код:
<li class="item-103 current active"></li>

а у второго меню (с псевдонимом) пункт принимают код:
<li class="item-147 active"></li>

Как сделать, чтобы пункт с псевдонимом из второго меню тоже принял класс "current active"?
« Последнее редактирование: 12.11.2014, 22:36:08 от Uman »

*

Uman

  • ***
  • 37
  • 0
Ребята, есть кто живой?

*

kik84

  • ******
  • 1266
  • 59
А зачем? Есть же active общий и на него можно накинуть стили. Current ведь это именно текущая страница для меню

*

Uman

  • ***
  • 37
  • 0
А зачем? Есть же active общий и на него можно накинуть стили. Current ведь это именно текущая страница для меню

Дело в том, что если в родительском пункте есть вложенный дочерний пункт, то при активации дочернего, оба пункта (родительский и дочерний) принимают класс "active". Так работает Joomla.

Есть на моём сайте скрипт, который удаляет ссылку из пункта меню страницы, которая ведет на саму себя (SEO-оптимизация), и этот скрипт работает именно с классом "current", потому что если он будет работать с классом "active", то скрипт удалит из меню не только ссылку страницы на саму себя, но также удалит ссылку на родительский пункт меню, а это уже лишнее.

А так-как активной странице класс "current" почему-то присваивается только в обычном меню (в меню с псевдонимами не присваивается), то при активации в одном меню ссылка страницы на саму себя удалена, а в другом меню (с псевдонимами) не удалена. Вот и прошу помочь сделать так, чтобы в обоих меню активизировался класс "current", тогда в обоих меню ссылка будет удалена, а не только в одном.
« Последнее редактирование: 12.11.2014, 23:23:46 от Uman »

*

midav

  • ******
  • 927
  • 113
Шаблон обычный или на фреймворке ?
Если обычный то в макете вывода меню, в файле шаблон/html/mod_login/default.php вот в это условие добавить класс current
Код: php
elseif ($item->type == 'alias')
{
$aliasToId = $item->params->get('aliasoptions');
if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
{
$class .= ' active current'; // сюда
}
elseif (in_array($aliasToId, $path))
{
$class .= ' alias-parent-active';
Если такого файла нет, можно создать, скопировав оригинальный файл из модуля меню .
Вроде бы работает .

Если шаблон на фреймворке, найти файл ответственный за вывод меню и сделать это там .
Ответы на вопросы по CSS . Откройте для себя Firebug

*

Uman

  • ***
  • 37
  • 0
midav, благодарю, сработало! Только две небольшие поправки:

1) Файл находится по этому адресу: шаблон/html/mod_menu/default.php
2) Порядок класса должен быть именно таким: "current active", а не наоборот.


Только вот не могу понять, скрипт всё-равно не удаляет активную ссылку из меню (которое с псевдонимами), несмотря на то, что классы идентичные у активных пунктов обоих меню. Помогите пожалуйста решить эту проблему, я в долгу не останусь.


В общем, файл, отвечающий за удаление активной ссылки из меню находится тут: /modules/mod_menu/tmpl/default_component.php
В этом файле оригинальный код выглядит так:
Код
switch ($item->browserNav) :
default:
case 0:
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
break;
case 1:


вышеприведенный код заменяем на этот:
Код
switch ($item->browserNav) :
default:
case 0:
if ($menu->getActive() == $menu->getItem($item->id)){
echo '<span '.$class.'>'.$linktype.'</span>';
}else {
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
}
break;
case 1:

в результате активные ссылки меню превращаются из <a></a> в <span></span>. Но этот код, как я уже говорил, удаляет активные ссылки только в обычном меню, в то время как в меню с псевдонимами ничего не меняется. Что изменить в коде, чтобы в обоих меню удалялась активная ссылка?


ЗЫ
Шаблон обычный.
« Последнее редактирование: 14.11.2014, 00:38:53 от Uman »

*

midav

  • ******
  • 927
  • 113
mod_menu конечно, опечатался просто, не то написал :)
Ответы на вопросы по CSS . Откройте для себя Firebug

*

midav

  • ******
  • 927
  • 113
Попробуйте так, в default.php добавить проверку на наличие класса current . После присвоения классов  , перед switch вставляем проверку :
Код: php
	if(strpos($class, 'current')){
$remove_link = TRUE;
}
else{
$remove_link = FALSE;
}

// Render the menu item.
switch ($item->type) :
case 'separator':

И потом в файлах default_component.php и default_url.php , поскольку псевдоним пункта меню обрабатывается в файле default_url.php , проверяем эту переменную и удаляем ссылку если true :
Код: php
	case 0:
if ($remove_link){
echo '<span '.$class.'>'.$linktype.'</span>';
}else {
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
}
break;
Ответы на вопросы по CSS . Откройте для себя Firebug

*

Uman

  • ***
  • 37
  • 0
midav, всё заработало, cпасибо огромное!

Скиньте мне в личку пожалуйста Ваш кошелёк WebMoney. Знаю, в той стране, где Вы живете, по сравнению с нашей Молдовой, это копейки, но чисто символически я всё-равно хотел бы Вас отблагодарить.

midav, всё заработало, cпасибо огромное!

Скиньте мне в личку пожалуйста Ваш кошелёк WebMoney. Знаю, в той стране, где Вы живете, по сравнению с нашей Молдовой, это копейки, но чисто символически я всё-равно хотел бы Вас отблагодарить.


Пожалуйста! Можете более подробно описать как вы побороли циклические ссылки? У вас не слетает шаблон меню?
Я готов отправить Вам денежку за более подробный ответ....

После внесения кода:
case 0:
if (in_array($item->id, $path) || in_array($aliasToId , $path)){
echo '<a class="separator">'.$linktype.'</a>';
}else {
?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
}  
break;
Стиль меню не меняется, и циклическая ссылка исчезает, но и в родителе тоже, что очень плохо для юзабилити....

А после такого решения, с сылками родителя и активным пунктом меню все ок, только пропадает стиль активного пункта меню:
switch ($item->browserNav) {
   default:
   case 0:
   $aliasToId = $item->params->get('aliasoptions');
       if ($item->flink == $_SERVER['REQUEST_URI']){
           echo '<span class="myclass">'.$linktype.'</span>';
       }else {
           ?><a <?php echo $class; ?>href="<?php echo $item->flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
       }
       break;

Пожалуйста, помогите)))) я с ума сойду)))
« Последнее редактирование: 01.08.2017, 01:58:19 от lawrik2005 »

*

midav

  • ******
  • 927
  • 113

           echo '<span class="myclass">'.$linktype.'</span>';


Что это за код ? Что за myclass ?
Ответы на вопросы по CSS . Откройте для себя Firebug