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

Пятница, 11 июля 2008 г.
Рубрика: MaxSite CMS -> Основы
Просмотров: 6050
Подписаться на комментарии по 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 удаляет все ведущие и конечные пробелы.

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

twitter.com facebook.com mail.ru friendfeed.com livejournal.ru memori.ru google.com yandex.ru

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

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

  2. А вообще зачем так заморачиватся подправил main-start.php и все

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

Имя и сайт используются только при регистрации

Если указать email (зарегистрироваться), то будет уведомление о новых комментариях.

Авторизация Loginza.

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