Форум русской поддержки Joomla!® CMS
10.12.2016, 09:01:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Выводить только текущий пункт меню и его дочерние пункты

 (Прочитано 433 раз)
0 Пользователей и 1 Гость смотрят эту тему.
v-v
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 87


« : 22.06.2015, 15:34:55 »

Помогите пожалуйста реализовать вывод меню.

Суть такова:
есть меню следующего вида

-Родительская категория 1
--Дочерняя категория 1.1
--Дочерняя категория 1.2
--Дочерняя категория 1.3

-Родительская категория 2
--Дочерняя категория 2.1
--Дочерняя категория 2.2
--Дочерняя категория 2.3

необходимо например чтобы при заходе на страницу "Родительская категория 1" в меню отображался только пункт Родительская категория 1 со всеми вложенными в него подпунктами, т.е показывался только текущий пункт меню и его подменю, если таковые имеются, а все остальные родительские пукты не отображались:

-Родительская категория 1
--Дочерняя категория 1.1
--Дочерняя категория 1.2
--Дочерняя категория 1.3
Записан
Shustry
Группа развития
*****

Репутация: +727/-3
Offline Offline

Пол: Мужской
Сообщений: 6667


Рисую дизайны


« Ответ #1 : 22.06.2015, 16:40:20 »

Создаёте три других меню, пункты которых это псевдонимы пунктов вашего основного. И публикуете модули на соответствующих страницах. Для удобства вывода можно AdvancedModulesManager использовать.
Записан
v-v
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 87


« Ответ #2 : 22.06.2015, 17:17:05 »

Создаёте три других меню, пункты которых это псевдонимы пунктов вашего основного. И публикуете модули на соответствующих страницах. Для удобства вывода можно AdvancedModulesManager использовать.

спасибо за подсказку, решение хорошее, но слишком громоздкое, т.к страниц очень много.
 Я пытался допилить шаблон вывода в mod_menu, там где формируется дерево меню..но что то не получается с условием вывода
Записан
Shustry
Группа развития
*****

Репутация: +727/-3
Offline Offline

Пол: Мужской
Сообщений: 6667


Рисую дизайны


« Ответ #3 : 22.06.2015, 17:40:57 »

Если знаете РНР, то вообще не проблема. Всё верно, делаете переопределение шаблона меню. Для первого уровня ($item->level == 1) делаете условие (если ссылка пункта та же, что и текущий URL, то выводить).
Записан
Gover
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 172



« Ответ #4 : 22.06.2015, 18:33:54 »

А в параметрах меню разве нет управления вложенностью выводимых пунктов?
Записан
Shustry
Группа развития
*****

Репутация: +727/-3
Offline Offline

Пол: Мужской
Сообщений: 6667


Рисую дизайны


« Ответ #5 : 22.06.2015, 18:38:45 »

Управление то есть. Но у ТС задача шире. Нужно на определённых страницах показывать только активный ПЕРВЫЙ уровень. А такого в системе меню не предусмотренно в принципе. Как вариант конечно тупо скрыть средствами CSS неактивные пункты первого уровня. Тогда задача вообще элементарная была бы. v-v, такой вариант вам как?
Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1251


« Ответ #6 : 22.06.2015, 18:56:55 »

Можно попробовать переопределить в default.php

Родительский пункт всегда .active, если даже текущим является вложенный пункт
Значит там нужно еще добавить флаг, типа $flag_active = true;

А перед выводом пункта поставить условие:

if ($flag_active ) {

72    echo '<li' . $class . '>';
...
}

Сам не проверял, но можете подумать
Записан
Shustry
Группа развития
*****

Репутация: +727/-3
Offline Offline

Пол: Мужской
Сообщений: 6667


Рисую дизайны


« Ответ #7 : 22.06.2015, 19:06:43 »

fbr, да, с условием active даже проще, чем со сравнением урлов. Респект. Но дополнительную проверку на level конечно нужно добавить. Т.е. двойное условие.
Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1251


« Ответ #8 : 22.06.2015, 19:08:26 »

ну это я упрощенно ))
на вскидку

Там может еще много чего придется добавить ..
Записан
v-v
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 87


« Ответ #9 : 22.06.2015, 23:00:48 »

Управление то есть. Но у ТС задача шире. Нужно на определённых страницах показывать только активный ПЕРВЫЙ уровень. А такого в системе меню не предусмотренно в принципе. Как вариант конечно тупо скрыть средствами CSS неактивные пункты первого уровня. Тогда задача вообще элементарная была бы. v-v, такой вариант вам как?

нет, скрывать ненужное средствами CSS - это не то))

Можно попробовать переопределить в default.php

Родительский пункт всегда .active, если даже текущим является вложенный пункт
Значит там нужно еще добавить флаг, типа $flag_active = true;

А перед выводом пункта поставить условие:

if ($flag_active ) {

72    echo '<li' . $class . '>';
...
}

Сам не проверял, но можете подумать
fbr, да, с условием active даже проще, чем со сравнением урлов. Респект. Но дополнительную проверку на level конечно нужно добавить. Т.е. двойное условие.

пробовал я с active, но в результате получается что выводится только один активный пункт меню, без подменюшек. Если активна одна из подменюшек - то выводится она и ее родитель...ПХП знаю на уровне ликбеза...что то все таки делаю неправильно
Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1251


« Ответ #10 : 22.06.2015, 23:42:49 »

Я же написал, что на вскидку ))
Подумать нужно, потупить ...

Есть еще класс .deeper, который назначается родительскому пункту, которому позволено выводить подменю
Нужно обработать его, чтобы не резало пункты внутри него. Попробуйте сбросить флаг.

89   if ($item->deeper) {
             $flag_active = false;
        ....

В общем экспериментируйте! Все не так просто
Записан
Shustry
Группа развития
*****

Репутация: +727/-3
Offline Offline

Пол: Мужской
Сообщений: 6667


Рисую дизайны


« Ответ #11 : 23.06.2015, 01:15:47 »

Сделайте дамп пункта меню, выложите сюда. Условие активности там по-моему другое должно быть. Активный (active) ВЕСЬ пункт меню. Включая подпункты. А текущий (curent) один.
Записан
v-v
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 87


« Ответ #12 : 23.06.2015, 23:17:29 »

Сделайте дамп пункта меню, выложите сюда. Условие активности там по-моему другое должно быть. Активный (active) ВЕСЬ пункт меню. Включая подпункты. А текущий (curent) один.

да, так и есть. Родительскому присваивается класс active parent, а дочернему current active
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet