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

Просмотров: 13590Комментарии: 3
Старый архив

В продолжение лекции об опциях, я решил привести практический пример. Давайте сделаем верхнее меню шаблона 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 07:54

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

2андр02-06-2009 11:34

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

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

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

Вы можете войти под своим логином или зарегистрироваться на сайте.

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

О проекте

MaxSite CMS предназначена для создания сайтов любой сложности. Система отлично подходит обычным пользователям, вебмастерам, фрилансерам и вебстудиям.