|
|
|
_без заголовка
Задача макроса @navigation - по URI оперделить заголовки, соотв. этому URI, и вывести в строку навигации. Сразу сделаю небольшое замечание: этот алгоритм будет работать в том случае, если Вы предпочитаете организовывать вложенные структуры разделов как вложенные друг в друга реальные директории (во замутил!). Ну, к примеру: http://server/level_1/level_2/level_3/.... Вроде бы всё понятно.
Структура файла базы разделов выглядит следующим образом:#_root.dat:
uri title
/ home
/news/ News
/news/archive/ News archive
/about/ About company
/about/history/ History
/about/contacts/ Contacts
/about/contacts/feedback/ Feedback
...
#Макрос альтернативной навигации:
@navigation[title]
^var[arrow;>>] #разделитель между разделами
^context[nav_root;^load[named;root.dat]]
^eq[^uri[];/;Начало;<a href=/>Начало</a>]
^context[navigation;
#Считываем URI браузера в строку string:
^var[string;^left[^match[\?.*;;;^uri[]];^eval[^length[^match[\?.*;;;^uri[]]]-1]]]
#Разбиваем строку string по / и записываем данные в текущую таблицу
^lsplit[^var[string];/]
#Переворачиваем таблицу
^flip[navigation]
#Начало цикла по строкам таблицы
^menu[
#по порядку следования uri разделов матчим их из URI браузера
#и заносим в переменную
^var[item_uri;^match[^item[0]/.*;;;^uri[]]]
^context[nav_root;
^eq[^var[item_uri];/;;
#переходим к строке раздела, uri которого соотв. переменной item_uri
^locate[uri;^var[item_uri]]
#пишем в документ
^var[arrow]<a href=^item[uri]>^item[title]</a>
]
]
]
#здесь пишем название документа, передаваемое в текущий макрос
^eq[^uri[];/;;^var[arrow]$title]
]
#Макрос шаблона документа c примером вызова навигации:
@html[title]
^macro[navifation;$title]В результате получиться (например):URI браузера:
/about/contacts/feedback/
Макрос навигации выводит след. строку:
About company >> Contacts >> Freedback
причём строка Freedback не залинкована, т.к. она текущаяВсё всем понятно? Может кто опровергнет мои размышления по данному вопросу?
И ещё: под IIS этот макрос немного не так работает, поскольку в IIS, в отличии от Apache, оператор ^uri[] в корневом каталоге выводит /index.html; Apache же - просто /.
Спасибо за внимание.
|