@formRow.local[label;body] пара "описание поля"+"поле" в форме. ^ifdef[$label; $label
;
] $body

@form.local[] HTML форма для отправки сообщения
^macro[formRow.local;ваше имя:;] ^macro[formRow.local;комментарии:;] ^macro[formRow.local;;]
@nav.local[] навигация по записям в книге для гостей ^context[nav; ^ifdef[^var[total];; ^sql[select count(id) from xgb] ^var[total;^item[0]] ] ^var[i;0]
| ^while[i<^var[total]; ^eq[^var[i];^var[start]; ^eval[1+i]-^if[^eval[count+i]>^var[total];^eval[total];^eval[count+i]] ; ^eval[1+i]-^if[^eval[count+i]>^var[total];^eval[total];^eval[count+i]] ] | ^var[i;+;^var[count]] ]
] @main ^var[start;^number[start]] ^var[count;10] ^macro[server; ^macro[html;;

Этот документ работает с ^;данными из ^;SQL таблицы ^;xgb*.

Все ^;что ^;нужно сделать для ^;показа записей, это ^;выбрать их ^;(записи) из ^;таблицы (select * from xgb) и ^;пройтись по ^;ним ^;оператором ^^menu[].

Если мы ^;хотим выдавать записи пачками по ^;n, то ^;SQL ^;запрос придется немного усложнить (select * from xgb limit s,n) и ^;озаботиться построением навигационной линейки, с ^;помошью которой нужно будет передавать параметр документу (с ^;какой записи начинать выборку).

С ^;записью данных в ^;таблицу тоже все ^;достаточно просто: ^^sql[insert into xgb ...]. Нужно только угадать момент, когда пользователь отправил данные на ^;сервер. Сделать это ^;можно по-разному. Я ^;в ^;данном случае вставил элемент в ^;форму <^;input type=hidden name=doInsert value=1>^; и ^;отслеживаю наличие  ^;параметра doInsert (^^ifdef[^^form[doInsert];...]).


* Код для ^;создания SQL ^;таблицы ^;xgb:

create table xgb (
id int not null auto_increment primary key,
published datetime,
name varchar(50),
comment text)

; ^ifdef[^form[doInsert]; ^context[tmp; ^sql[insert into xgb ( published, name, comment ) values ( now(), '^form[name]', '^form[comment]' )] ] ] ^macro[form.local] ^macro[nav.local] ^context[records; ^sql[select date_format(published, '%d.%m.%Y %H:%i') as fpublished, name, comment from xgb order by published desc limit ^var[start],^var[count]] ^menu[

^item[name] (^item[fpublished])
^item[comment]

^eq[^item[count];^item[number];;
] ] ] ^macro[nav.local] ] ]