Стиль активного пункта меню в Joomla

nikonlay
На сайте с 11.12.2006
Offline
191
2810

Здравствуйте!

У меня есть сайт на joomla 3.3.3, в нем есть главное горизонтальное меню, с выпадающими списками из пунктов.

Если нажать на один из основных пунктов меню, то переходим на нужную страницу (например /uslugi), на ней этот пункт становится выделенным цветом. При этом, на внутренних страницах справа есть еще одно меню, вертикальное, которое дублирует выпадающий список из соответствующего пункта главного меню.

И вот если потом нажать на один из пунктов этого правого меню, то переходим на страницу третьего уровня (например /uslugi/pokraska), и на этой странице пункт правого меню выделен цветом, а вот пункт верхнего меню уже перестает быть выделенным.

А я хотел бы, чтобы он оставался выделенным.

Посмотрел в исходном коде, там на странице /uslugi в класс пункта добавляется active: <li class="level1 item217 parent active"> что и делает выделение. А на странице /uslugi/pokraska - этот active уже исчезает.

Посмотрел в коде модуля меню: /modules/mod_menu/tmpl/default.php , там есть условие, которое проверяет, есть ли в урл нужное слово:

elseif ($item->type == 'alias')

{
$aliasToId = $item->params->get('aliasoptions');

if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
{
$class .= ' active';
}
elseif (in_array($aliasToId, $path))
{
$class .= ' alias-parent-active';
}
}

И по идее, оно должно подставлять active или хотя бы alias-parent-active, но на странице /uslugi/pokraska нет ни того, ни другого!

Подскажите, пожалуйста, сталкивался кто-нибудь с таким, и знает ли решение?

Мощные фонари и телескоп: https://market.yandex.ru/business/79203856
nikonlay
На сайте с 11.12.2006
Offline
191
#1

Фуф, разобрался все-таки за несколько дней с этим.

Расскажу решение, на случай, если еще кто столкнется.

Побившись несколько часов, я решил проверить, а действительно ли этот файл /modules/mod_menu/tmpl/default.php отвечает за стиль верхнего меню, а то может я не в том файле копаюсь?

Для этого я в код из предыдущего сообщения дописал xyz:

if (count($path) > 0 && $aliasToId == $path(count($path) - 1)) 
{
$class .= ' activexyz';
}

сохранил, перезагрузил страницу и увидел, что получилось не как я ожидал:

li class="level1 item217 parent activexyz"

а:

li class="level1 item217 parent"

То есть, при изменении строки ' active' кто-то, видимо какой-то парсер вывода джумлы, вообще удаляет эту строку, как инородное тело.

Я в итоге так и не понял, кто это так подчищает код, но сделал вывод, что никаких строк кроме ' active' джумла выводить не хочет, поэтому в коде default.php изменил это:

elseif (in_array($aliasToId, $path)) 
{
$class .= ' alias-parent-active';
}

на это:

elseif (in_array($aliasToId, $path)) 
{
$class .= ' active';
}

и действительно, после такого изменения, нужные пункты горизонтального меню на страницах третьего уровня стали выделенными, то есть в коде их li появилось active! Ура!

Но для меня так и осталось загадкой, кто и для чего придумал этот класс alias-parent-active, если джумла его все равно удаляет.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий