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

@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 операторов на каждой заглавной странице раздела, либо если страницы имеют один и тот же шаблон, сделайте это в этом шаблоне.
2002-04-12 19:08:56 UTC parser snippet web