Кастомизируем верхнее меню
В продолжение лекции об опциях, я решил привести практический пример. Давайте сделаем верхнее меню шаблона 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 удаляет все ведущие и конечные пробелы.
Надеюсь, что этот код не вызовет у вас проблем. :)
Кстати в ИЕ 6 не очень страница смотрится в части этих фрагментов кода
А вообще зачем так заморачиватся подправил main-start.php и все
беда, попробовал вставить, выдало еррор
Fatal error: Call to undefined function get_path_files() in /атата/application/maxsite/admin/plugins/template_options/options.php on line 54