В продолжение лекции об опциях, я решил привести практический пример. Давайте сделаем верхнее меню шаблона 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(" ", 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 удаляет все ведущие и конечные пробелы.
Надеюсь, что этот код не вызовет у вас проблем. :)
Комментариев: 3 RSS
135metodСайт25-07-2008 05:54
Кстати в ИЕ 6 не очень страница смотрится в части этих фрагментов кода
2андр02-06-2009 09:34
А вообще зачем так заморачиватся подправил main-start.php и все
3Андрей СергеевичСайт18-10-2012 21:18
беда, попробовал вставить, выдало еррор
Fatal error: Call to undefined function get_path_files() in /атата/application/maxsite/admin/plugins/template_options/options.php on line 54