2002-02-13 20:13:54 UTC

Если вы хотите на сайте сделать навигацию «хлебные крошки» (думаю понятно, что это такое) и сайт представляет собой создание размером более десятка страниц, то достаточно лениво и утомительно на каждой странице вручную делать данную навигацию.

Для успешной реализации данного типа навигации, информация на сайте, должна быть соответствующим образом структурирована, и каждый подраздел должен находится в отдельном каталоге, (разделы могут быть вложены один в другой, образуя, таким образом, иерархическую структуру).

Все что нам нужно иметь, для того чтобы сделать автоматическим формирование навигации – это список всех относительных (от корня сервера) путей разделов, либо в tab delimited файле, либо в базе данных. Если сайт не большой, — то проще сделать файл, если большой без базы не обойтись, но об этом в другой раз. Файл с описаниями всех разделов сайта будет иметь вид:

dir	title
/path1/	title1
/path1/path11/	title11
/path2/	title2

Наконец сам макрос, создающий навигационную строку:

@navigation[title] title - это название страницы
#	Определяем переменную splt - разделитель между элементами строки навигации
^var[splt;&gt^;]
# определяем переменную – название документа по умолчанию
# здесь это index.html, но можно и любое другое значение
^var[default.doc;index.html]
# создаем именованный контекст sections с названиями всех разделов сайта
^context[sections;^load[/путь/к/файлу/файл_с_описанием_разделов]]

^context[nav;
# Разбиваем URI на составляющие и ими столбцы
# текущего контекста
	^lsplit[^env[PATH_INFO];/]
# Делаем столбцы строками
	^flip[nav]
# Начинаем формировать переменную string - HTML код строки навигации
	^var[string;<a href=/>Название сайта</a>]
# Начинаем формировать переменую – uri раздела
	^var[dir;/^item[0]/]
	^menu[
# Переменная для определения следующего элемента URI
		^var[next_row;^item[next;0]]

		^context[sections;
# Поиск для построенного каталога в контексте
			^locate[dir;^var[dir]]
# фиктивная переменная page – для определения того, является ли
# следующий элемент страницей или нет?
			^var[page;^findstr[html;^var[dir]]]
			^if[^var[page] > 0;
				^var[string;.; ^var[splt] $title]
				;
				^var[next;^findstr[^var[default.doc];^var[next_row]]]
				^if[^var[next] < 0;
					^var[string;.; ^var[splt] <a href=^var[dir]>^item[title]</a>]
				;]
			]
		]
	^var[dir;.;^item[next;0]/]
	]
]

далее остается только вывести полученную переменную ^var[string] на уровне обработки none, что-то вроде того:

^level[none;var[string]]
2002-02-13 20:13:54 UTC parser snippet web