Опубликовано автор в категориях CMS, Joomla.

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

Лично я в силу того что я верстальщик решал ее с помощью небольшого куска JavaScript кода с использованием встроенной в Joomla! библиотеки Mootolls. Однако, каждый раз делая это, я думал что в случае, если пользователь отключит JS в браузере, то мой метод не сработает, а значит он не 100%. Поэтому, логическим решением являлось то, что нужно передавать класс первому и последнему элементам списка меню с помощь сервера а не клиента. И такое решение нашлось, при создании одного из первых шаблонов для Joomla! 1.6, а в последствии было испробовано и проверено на Joomla! 1.7. Сразу скажу, что решение не придумано мной, я взял его на форуме Joomla!, поэтому ни коим образом не претендую на авторство, а просто лишь хочу поделится им со всеми, кто разрабатывает шаблоны для CMS Joomla!

Итак, для того чтобы добавить нужные классы к первому и последнему пунктам меню Joomla! 1.6-1.7 вам нужно сделать следующее:

1. Добавить в папку /html вашего шаблона шаблон для переопределения разметки модуля меню Joomla! Для этого из папки /modules/mod_menu/tmpl/ скопируйте файлы default.php и index.html в папку переопределения разметки вашего шаблона /templates/your_template_name/html/mod_menu

2. Теперь в фале default.php модуля меню в папке /html вашего шаблона найдите строки

if ($item->deeper) {
      $class .= 'deeper ';
}

и замените их на следующий код

 $currentitemcount ++;
   if ($item->shallower or $currentitemcount == count($list)) {
      $class .= ' last ';
   }
 
   if ($lastdeeper or $currentitemcount == 1) {
      $class .= ' first ';
   }
 
 
   if ($item->deeper) {
      $class .= ' deeper ';
      $lastdeeper = true;
   } else {
      $lastdeeper = false;   
   }

Собственно на этом и все. Остается лишь добавить, что если ваш сайт находится в рабочем режиме и на нем включено кеширование, то не забудьте почистить кеш. Удачного вам Joomla! строительства.

8 комментариев к записи “Маркировка первого и последнего пункта меню в Joomla 1.6 и Joomla 1.7”

  1. mihdan

    Благодарствую за столь простое изящное и нужное решение. Сам постоянно использовал JavaScript для решения подобных задач.

    Ответить
    • Hiway

      joniks Эти элементы замечательно подходят для нормальных браузеров. Но есть еще ie6 который не понимает ни :first-child и :last-child и есть еще IE 7-8 которые знают только first-child — вот ради них и все старания 🙂

      Ответить
      • joniks

        Вы смеетесь, лично для меня и моих клиентов этого браузера(ie6) не существует уже года два. Данный браузер на данный момент стоит только на не лицензионном ПО и если клиент пытается с меня требовать его поддержку то я обычно пугаю ответственностью за использование пиратского ПО. А :last-child-ом как то редко пользуюсь, даже и не припомню когда приходилось уже. В любом случае можно использовать определенные javascript библиотеки которые грузятся только для ишаков и расширяют css до версии 3.

        Ответить
        • Hiway

          C одной стороны да, но опять же в конце вашей мысли вы предлагаете использовать для этого специальные js-библиотеки, но зачем увеличивать количество запросов к серверу, пусть даже на один, и время загрузки страницы, пусть даже на 1 секунду, если можно без этого обойтись?

          Ответить
          • joniks

            Еще можно использовать файлы с расширением .htc подключая его в нужных местах(там где ie не следует стандартам) с помощью свойства behavior.
            Да согласен, будут дополнительные обращения к серверу, но это будет случатся только для пользователей браузеров семейства ie которые и так не отличаются быстродействием, плюс ко всему это дополнительный стимул для пользователя сменить браузер.

      • joniks

        К слову, сейчас мобильные браузеры на порядок чаще используются чем Ie6-7 а в них большинство сайтов выглядит похуже.

        Ответить

Оставить комментарий

  • (не будет показан)