Рекомендуем

Скидки до 30% на все темы и подписки... Никаких уловок или обмана Подписка на GavickPro включает в себя полный доступ к шаблонам для Joomla и WordPress, без каких-либо...

Далее...

Elegant Icon Font - 310 великолепных иконок... ElegantThemes создали поистине самый красивый, элегантный и полный набор иконок. Набор предлагается в виде веб шрифта,...

Далее...

JA Fubix адаптивный шаблон для Joomla... JA Fubix - апрельский шаблон от JoomlArt. Отлично подходящий для сайтов с тематикой спортивных новостей использующих...

Далее...

T3 Framework от JoomlArt О фреймворке Фреймворк T3 заслужено считается одним из самых популярных шаблонных фреймворков для Joomla. Все шаблоны...

Далее...

3 популярных фреймворка для... Очень большую роль в популярности Joomla сыграла система шаблонов, позволяющая в считанные секунды преобразить...

Далее...

  • Prev
  • Next

Как выборочно спрятать пункт в модуле меню (mod_menu) Joomla 2.5 (Способ 2)

5

Категории: Joomla, Общие вопросы программирования в Joomla

Не откладывая в долгий ящик, рассмотрим второй способ сокрытия пункта меню в модуле меню. Это самый универсальный способ, но и у него есть свои минусы.

Хотя минус у него всего один, но очень серьезный. Заключается он в том, что необходимо будет внести небольшие изменения в исходный код CMS Joomla. Это не страшно, но после каждого обновления придется вносить это изменение еще раз.

Я не приверженец таких хаков, более того я активный их противник, но иногда без них просто не обойтись.

Для этого способа необходимо придумать как отличать обычный пункт меню от того который необходимо скрыть. При это необходимо минимизировать вмешательство в код CMS. Просмотрев все варианты, я остановился на свойстве «CSS-класс ссылки», в разделе «Параметры отображения ссылки» в «редактировании пункта меню». Во-первых, для скрытой ссылки это свойство не нужно, во-вторых, оно влияет только на отображение самого пункта, и в третьих если после очередного обновления вы забудете внести изменения, то ничего не сломается, ссылка просто появиться в меню, так что подходит на все 100%.

Так же я определил, что для скрытой ссылки это свойство должно иметь значение «hide», для себя вы можете выбрать другое значение, необходимо будет только сделать изменения в предложенном мною коде.

Ну, а теперь идем «ломать» Joomla. Относительно папки, где установлена Joomla, находим файл modules/mod_menu/helper.php. Сделав копию (всегда делайте копии файлов с которыми выработаете), открываем его не редактирование и ищем строчки:

			if ($items) {
				foreach($items as $i => $item)
				{
					if (($start && $start > $item->level)
						|| ($end && $item->level > $end)
						|| (!$showAll && $item->level > 1 && !in_array($item->parent_id, $path))
						|| ($start > 1 && !in_array($item->tree[$start-2], $path))
					) {
						unset($items[$i]);
						continue;
					}

У меня они начинаются с 52 строки. И добавляем еще одну строку в приведенном выше фрагменте кода, между строками 7 и 8. Если вы решили выбрать другое значения свойства для скрытой ссылки, то не забудьте в этой строке его поменять.

|| ($item->params->GetValue('menu-anchor_css')=='hide')

Должен получиться следующий код:

			if ($items) {
				foreach($items as $i => $item)
				{
					if (($start && $start > $item->level)
						|| ($end && $item->level > $end)
						|| (!$showAll && $item->level > 1 && !in_array($item->parent_id, $path))
						|| ($start > 1 && !in_array($item->tree[$start-2], $path))
						|| ($item->params->GetValue('menu-anchor_css')=='hide')
					) {
						unset($items[$i]);
						continue;
					}

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

Предыдущая запись:

Следующая запись:


Комментариев 5 комментариев

Спасибо, полезная статья.

Неправильный способ! Точнее не совсем правильный. Можно добиться того же самого не исправляя исходный код Joomla. Для этого надо править не helper а modules/mod_menu/tmpl/default.php. Причем править надо не сам этот файл, а его копию созданную в каталоге шаблона сайта. Тогда все исходные файлы Joomla останутся целыми и при обновлении доработка не потеряется. Автору очень рекомендую книгу «Dexter M., Landry L. — Joomla! Programming — 2012» прочесть. Выслать на мыло?

Всем интересующимся поподробнее опишу:
1) копируем файл modules/mod_menu/tmpl/default.php в дирректорию templates/МОЙ_ШАБЛОН/html/mod_menu/
2) С файлом templates/МОЙ_ШАБЛОН/html/mod_menu/default.php делаем следующее:

находим строчку «foreach ($list as $i => &$item)» (у меня это строчка 23) и после нее вставляем код:
if ($item->params->GetValue(‘menu-anchor_css’) == «hide») continue;

Получается примерно так:

foreach ($list as $i => &$item) :

if ($item->params->GetValue(‘menu-anchor_css’) == «hide») continue;

$class = ‘item-‘.$item->id;
if ($item->id == $active_id) {
$class .= ‘ current’;
}

Все. Так как при обновлении движка файлы шаблона не изменяются, то не придется и парится о том что вы что то там дорабатывали.

Спасибо огромное, помогло!

класс ссылки hidden
css .hidden{display:none;}

Добавить комментарий

Professional Responsive Joomla Templates