На Narod.ru есть замечательная гостевая книга, что поддерживает шаблоны, определяемые хозяином. Инструкцию к шаблонам можно найти здесь. Если вкратце, технология работы с гостевой книгой состоит в написании двух файлов: первый - образ гостевой книги в целом, второй - образ представления одного отдельно взятого сообщения из неё. При этом книга вызывается примерно следующим образом:
где guest.html - образ гостевой книги, а message.html - образ сообщения. Помимо этого есть ещё два параметра: mpp=15 и c=1; в первом указано выводить до 15 сообщений сразу, а во втором - показывать первую страницу. Одна страница - это как раз те 15 сообщений, заданных в mpp. Таким образом, если указать mpp=1, то параметр с будет просто указывать на сообщение.
В чём же состоит принцип замены SSI? Сначала делаем ссылку на гостевую книгу примерно таким образом:
Обратите внимание на переменные mpp и c: они показывают, что за один раз отображаться будет только одно сообщение (mpp), и это будет сообщение № 11 с конца.
Вот уже почти получена готовая замена SSI. В файл guest.html нужно поставить {MESSAGES} в нужном месте, а затем в файл message.html можно вставлять следующие определители: {MESSAGES}, {AUTHORNAME}, {AUTHOREMAIL}, {URL} и {OWNERREPLY}. Каждый из них заменяется сообщением из поля гостевой книги (принцип тот же, что и у SSI :). Однако не всё так просто - возникают сразу две проблемы: проблема вставки нескольких включений и проблема тегов: в гэсте значки тэгов < > заменяются на < > соответственно; исключение состовляют только {MESSAGES} и {OWNERREPLY}. И если с первой проблемой можно хоть как-то извернуться (ставя по два сообщения в mpp и т. д.), то вторая значительно серьёзнее.
Я предлагаю два метода её решения. Первый метод - использовать для текста в формате HTML только поля {MESSAGES} и {OWNERREPLY}, а остальные поля оставить как вспомогательные. Второй метод - просто вставить скрипт, что менял бы < > обратно на символы < >. Скрипт может быть подобен следующему и содержаться в файле шаблона сообщения (впрочем, саму функцию замены можно вытащить в файл шаблона книги, а вызывать её уже после каждого сообщения из шаблона сообщения):
<!-- начало файла шаблона сообщения -->
<form name="inside"><input name="message" type=hidden value="{URL}"></form>
<script language="JavaScript">
// функция замены < > обратно на символы < >
// она собрана только из стандартных функций и тестирована на IE, Opera и Netscape
function st(s)
{
// делаем замену < на <
p = s.indexOf("<",0);
while(p > 0)
{
s = s.substring(0,p) + "<" + s.substring(p+4,s.length-1);
p = s.indexOf("<",0);
}
// то же самое, но с >
p = s.indexOf(">",0);
while(p > 0)
{
s = s.substring(0,p) + ">" + s.substring(p+4,s.length-1);
p = s.indexOf("<",0);
}
return s;
}
// берём строку, исправляем её и сразу же выводим:
document.write(st(document.inside.message.value));
/*
обратите внимание на метод доступа к сообщению:
во первых - используется скрытый input, поэтому
знаки переноса строки не вызывают сбоя в скрипте;
во-вторых - используется имя формы (inside)
В случае вывода не одного сообщения, а нескольких,
лучше использовать метод доступа через коллекцию forms:
document.forms[n].message.value
где n - это номер формы, содержащей сообщение,
которое нужно обработать
*/
</script>
<!-- конец файла шаблона сообщения -->
Вставив этот скрипт, не забудьте удалить из него все комментарии - они тоже место занимают, зачем загружать каналы? ;o)
Как действует такая замена SSI? Вызвав, скажем,
http://narod.yandex.ru/guestbook/index.xhtml?owner=1741499&mainhtml=guest.html&messageshtml=message.html&mpp=1&c=11,
мы получаем 11-ю страницу, а задав с=16 - получим 16-ю страницу, и так далее!
P.S. Ссылка на гостевую книгу сайта la-murr.narod.ru не означает, что там использована описанная технология; иногда фреймование сайта - не признак дурного вкуса, а изящное решение для облегчения подготовки материалов к опубликованию и уменьшения нагрузки канала: не надо по несколько раз грузить одни и те же текстовые элементы ;o)