2002-02-13 20:13:54 UTC
Если вы хотите на сайте сделать навигацию «хлебные крошки» (думаю понятно, что это такое) и сайт представляет собой создание размером более десятка страниц, то достаточно лениво и утомительно на каждой странице вручную делать данную навигацию.
Для успешной реализации данного типа навигации, информация на сайте, должна быть соответствующим образом структурирована, и каждый подраздел должен находится в отдельном каталоге, (разделы могут быть вложены один в другой, образуя, таким образом, иерархическую структуру).
Все что нам нужно иметь, для того чтобы сделать автоматическим формирование навигации – это список всех относительных (от корня сервера) путей разделов, либо в tab delimited файле, либо в базе данных. Если сайт не большой, — то проще сделать файл, если большой без базы не обойтись, но об этом в другой раз. Файл с описаниями всех разделов сайта будет иметь вид:
dir title /path1/ title1 /path1/path11/ title11 /path2/ title2
Наконец сам макрос, создающий навигационную строку:
@navigation[title] title - это название страницы # Определяем переменную splt - разделитель между элементами строки навигации ^var[splt;>^;] # определяем переменную – название документа по умолчанию # здесь это 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]]