Кастомизируем верхнее меню
Пятница, 11 июля 2008 г.
Просмотров: 228
Подписаться на комментарии по RSS
В продолжение лекции об опциях, я решил привести практический пример. Давайте сделаем верхнее меню шаблона default настраиваемым.
Для начала определимся с конечной целью. Для этого откроем файл main-start.php и увидим вот примерно такой код:
- <ul>
- <li class="selected"><a href="<?= getinfo('siteurl') ?>"><span>Главная</span></a></li>
- <li><a href="<?= getinfo('siteurl') ?>about"><span>О сайте</span></a></li>
- <li><a href="<?= getinfo('feed') ?>"><span>RSS</span></a></li>
- <li><a href="<?= getinfo('siteurl') ?>comments"><span>Комментарии</span></a></li>
- </ul>
Данный код отвечает за вывод элементов меню. Это совсем простой код, поэтому объяснять его я не вижу смысла. Главное, что мы увидели, что элементы меню заключены в тэг <li>. Следовательно наш код тоже должен генерировать пункты меню в этом теге. Для текущего пункта меню мы делаем подсветку путем добавления класса «selected».
Настройку меню вынесем в файл options.ini нашего шаблона (default). Добавим такую опцию:
- [Верхнее меню]
- options_type = templates
- options_key = top_menu
- type = textarea
- description = "Укажите полные адреса в меню и через | название ссылки. Каждый пункт в одной строчке. <br />Пример: <b>http://maxsite.org/ | Блог Макса</b>"
- default =
То есть мы делаем опцию «top_menu». Каждая строка textarea-поля будет представлять собой одну ссылку, которую следует указать полностью (с http://). Через символ «|» нужно указать название ссылки.
Теперь, вместо пунктов <li> (можно перед ними или после, кому как нравится) мы встроим обработчик опции top_menu, который и будет выводить наши ссылки. Сам код несложный, поэтому я привожу готовый вариант. Да и к тому же каждая строчка прокомментирована.
- <?php
- if ( $menu = mso_get_option('top_menu', 'templates', '') )
- {
- # в массив
- $menu = explode("\n", trim($menu));
- # определим текущий url
- $current_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- # обходим в цикле
- foreach ($menu as $elem)
- {
- # разобъем строчку на адрес | название
- $elem = explode('|', $elem);
- # должно быть два элемента
- if (count($elem) > 1 )
- {
- $url = trim($elem[0]); // адрес
- $name = trim($elem[1]); // название
- # если текущий адрес совпал, значит мы на этой странице
- if ($url == $current_url) $class = ' class="selected"';
- else $class = '';
- # выводим
- echo '<li' . $class . '><a href="' . $url . '"><span>'
- . $name . '</span></a></li>' . NR;
- }
- }
- }
- ?>
Функция explode разбивает текст в массив по указанному разделителю. В первом сучае это перенос строки, а во втором наш «|».
Функция trim удаляет все ведущие и конечные пробелы.
Надеюсь, что этот код не вызовет у вас проблем. ![]()

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