Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 12283 Просмотров
*

Uman

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

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

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

Uman

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
Ребята, есть кто живой?
*

kik84

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

Uman

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

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

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

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

midav

  • Давно я тут
  • 926
  • 115 / 1
Шаблон обычный или на фреймворке ?
Если обычный то в макете вывода меню, в файле шаблон/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 / 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>. Но этот код, как я уже говорил, удаляет активные ссылки только в обычном меню, в то время как в меню с псевдонимами ничего не меняется. Что изменить в коде, чтобы в обоих меню удалялась активная ссылка?


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

midav

  • Давно я тут
  • 926
  • 115 / 1
mod_menu конечно, опечатался просто, не то написал :)
Ответы на вопросы по CSS . Откройте для себя Firebug
*

midav

  • Давно я тут
  • 926
  • 115 / 1
Попробуйте так, в 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 / 0
midav, всё заработало, cпасибо огромное!

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

lawrik2005

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
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;

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

midav

  • Давно я тут
  • 926
  • 115 / 1

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


Что это за код ? Что за myclass ?
Ответы на вопросы по CSS . Откройте для себя Firebug
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Назначение макета, посредством ссылки в меню

Автор xxxLOGIATxxx

Ответов: 20
Просмотров: 4766
Последний ответ 04.02.2022, 14:44:14
от hoi
Съезжает меню при наведении

Автор yyyuuu

Ответов: 4
Просмотров: 1982
Последний ответ 08.12.2020, 11:12:32
от AlexB
Добавить позиция или изменить порядок

Автор FBM

Ответов: 15
Просмотров: 3483
Последний ответ 21.05.2019, 11:01:50
от FBM
Проблемы в горизонтальном меню Joomla 2.5

Автор Димьяна

Ответов: 1
Просмотров: 2353
Последний ответ 27.11.2018, 14:58:30
от Ragivort
mod_menu и подписи к пунктам меню (subtitles)

Автор St@lker

Ответов: 21
Просмотров: 8175
Последний ответ 29.10.2017, 16:24:00
от xilog