MaxSite CMS

Официальный сайт

Кастомизируем верхнее меню

Рубрика: MaxSite CMS -> Шаблоны
Пятница, 11 июля 2008 г.
Просмотров: 227
Подписаться на комментарии по RSS

В продолжение лекции об опциях, я решил привести практический пример. Давайте сделаем верхнее меню шаблона default настраиваемым.

Для начала определимся с конечной целью. Для этого откроем файл main-start.php и увидим вот примерно такой код:

  1.  <ul>
  2.   <li class="selected"><a href="<?= getinfo('siteurl') ?>"><span>Главная</span></a></li>
  3.   <li><a href="<?= getinfo('siteurl') ?>about"><span>О сайте</span></a></li>
  4.   <li><a href="<?= getinfo('feed') ?>"><span>RSS</span></a></li>
  5.   <li><a href="<?= getinfo('siteurl') ?>comments"><span>Комментарии</span></a></li>
  6.  </ul>

Данный код отвечает за вывод элементов меню. Это совсем простой код, поэтому объяснять его я не вижу смысла. Главное, что мы увидели, что элементы меню заключены в тэг <li>. Следовательно наш код тоже должен генерировать пункты меню в этом теге. Для текущего пункта меню мы делаем подсветку путем добавления класса «selected».

Настройку меню вынесем в файл options.ini нашего шаблона (default). Добавим такую опцию:

  1.  [Верхнее меню]
  2.  options_type = templates
  3.  options_key = top_menu
  4.  type = textarea
  5.  description = "Укажите полные адреса в меню и через | название ссылки. Каждый пункт в одной строчке. <br />Пример: <b>http://maxsite.org/ | Блог Макса</b>"
  6.  default =

То есть мы делаем опцию «top_menu». Каждая строка textarea-поля будет представлять собой одну ссылку, которую следует указать полностью (с http://). Через символ «|» нужно указать название ссылки.

Теперь, вместо пунктов <li> (можно перед ними или после, кому как нравится) мы встроим обработчик опции top_menu, который и будет выводить наши ссылки. Сам код несложный, поэтому я привожу готовый вариант. Да и к тому же каждая строчка прокомментирована.

  1.  <?php
  2.   if ( $menu = mso_get_option('top_menu', 'templates', '') )
  3.   {
  4.   # в массив
  5.   $menu = explode("\n", trim($menu));
  6.  
  7.   # определим текущий url
  8.   $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  9.  
  10.   # обходим в цикле
  11.   foreach ($menu as $elem)
  12.   {
  13.   # разобъем строчку на адрес | название
  14.   $elem = explode('|', $elem);
  15.  
  16.   # должно быть два элемента
  17.   if (count($elem) > 1 )
  18.   {
  19.   $url = trim($elem[0]); // адрес
  20.   $name = trim($elem[1]); // название
  21.  
  22.   # если текущий адрес совпал, значит мы на этой странице
  23.   if ($url == $current_url) $class = ' class="selected"';
  24.   else $class = '';
  25.   # выводим
  26.   echo '<li' . $class . '><a href="' . $url . '"><span>'
  27.   . $name . '</span></a></li>' . NR;
  28.   }
  29.   }
  30.   }
  31.  ?>

Функция explode разбивает текст в массив по указанному разделителю. В первом сучае это перенос строки, а во втором наш «|».

Функция trim удаляет все ведущие и конечные пробелы.

Надеюсь, что этот код не вызовет у вас проблем. smile

Комментариев: 1

  1. 2008-07-25 в 07:54:40 | 35metod

    Кстати в ИЕ 6 не очень страница смотрится в части этих фрагментов кода

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

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



(обязательно)