2002-04-12 19:08:56 UTC
В одном из прошлых примеров обещалось рассказать о формировании в базе данных списка всех разделов (это нужно для формирования навигации «хлебные крошки»). Обещания надо выполнять, поэтому ниже приведу текст макроса, которым я это делаю.
@sections.list[] ^eq[^tolower[^name[^env[PATH_INFO]]];index; ^var[length;^length[^env[PATH_INFO]]] ^var[length;-;10] ^var[dir;^left[^env[PATH_INFO];^var[length]]] ^context[sections; ^sql[ select dir, title from sections where dir = '^var[dir]' ] ^empty[ ^sql[ insert into sections (dir, title) values ('^var[dir]', '^var[page.title]') ] ;] ] ;]
Пояснения:
-
Список всех разделов сайта хранится в таблице sections, которая имеет два столбца dir и title. Создать ее можно, например, так:
create table sections ( dir varchar(200) not null, title char(50) not null, primary key (dir) )
- ^var[page.title] – это название страницы и я его определяю в макросе autoexec на каждой странице, можно и по-другому, но до вызова этого макроса (формирующего список разделов сайта в базе).
- ^var[dir] – это фактически каталог, где находится раздел. Причина, по которой эта переменная формируется так заумно, — это то что вызов ^uri[] работает по разному на разных веб серверах.
- У меня документ по умолчанию index.html, если у вас другой, то переделайте второй аргумент в операторе ^eq[] и поставьте другую цифру в конструкции ^var[length;-;10] (10 – это длина строки index.html).
- Вставьте макрос sections.list в блок SQL операторов на каждой заглавной странице раздела, либо если страницы имеют один и тот же шаблон, сделайте это в этом шаблоне.