parser

/faq/faq
/authors/авторы
/docs/документация

/powered_by_parser/в действии
/feedback/куда говорить
/jargon/жаргон

/download/скачать

/examples/примеры
/forum/форум



Поиск по форуму

По умолчанию ключевое слово ищется только в заголовке сообщения.

Ключевое слово:

Фильтровать по автору:



_без заголовка

Stepan | orlikan@yandex.ru 05.04.2002 10:42

Задача макроса @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 же - просто /.

Спасибо за внимание.

<<  Вернуться к списку сообщений


E-mail: mailbox@parser.ruCopyright © 1997-2001 Студия Артемия Лебедева