Здесь представлен архив "Народного образования"

Перейти на главную страницу "Народного образования" >>


Гостевая книга как замена SSI / Изобретательность в действии

На Narod.ru есть замечательная гостевая книга, что поддерживает шаблоны, определяемые хозяином. Инструкцию к шаблонам можно найти здесь. Если вкратце, технология работы с гостевой книгой состоит в написании двух файлов: первый - образ гостевой книги в целом, второй - образ представления одного отдельно взятого сообщения из неё. При этом книга вызывается примерно следующим образом:

http://narod.yandex.ru/guestbook/index.xhtml?owner=1741499&mainhtml=guest.html&messageshtml=message.html&mpp=15&c=1,

где guest.html - образ гостевой книги, а message.html - образ сообщения. Помимо этого есть ещё два параметра: mpp=15 и c=1; в первом указано выводить до 15 сообщений сразу, а во втором - показывать первую страницу. Одна страница - это как раз те 15 сообщений, заданных в mpp. Таким образом, если указать mpp=1, то параметр с будет просто указывать на сообщение.

В чём же состоит принцип замены SSI? Сначала делаем ссылку на гостевую книгу примерно таким образом:

http://narod.yandex.ru/guestbook/index.xhtml?owner=1741499&mainhtml=guest.html&messageshtml=message.html&mpp=1&c=11.

Обратите внимание на переменные mpp и c: они показывают, что за один раз отображаться будет только одно сообщение (mpp), и это будет сообщение № 11 с конца.

Вот уже почти получена готовая замена SSI. В файл guest.html нужно поставить {MESSAGES} в нужном месте, а затем в файл message.html можно вставлять следующие определители: {MESSAGES}, {AUTHORNAME}, {AUTHOREMAIL}, {URL} и {OWNERREPLY}. Каждый из них заменяется сообщением из поля гостевой книги (принцип тот же, что и у SSI :). Однако не всё так просто - возникают сразу две проблемы: проблема вставки нескольких включений и проблема тегов: в гэсте значки тэгов < > заменяются на &lt; &gt; соответственно; исключение состовляют только {MESSAGES} и {OWNERREPLY}. И если с первой проблемой можно хоть как-то извернуться (ставя по два сообщения в mpp и т. д.), то вторая значительно серьёзнее.

Я предлагаю два метода её решения. Первый метод - использовать для текста в формате HTML только поля {MESSAGES} и {OWNERREPLY}, а остальные поля оставить как вспомогательные. Второй метод - просто вставить скрипт, что менял бы &lt; &gt; обратно на символы < >. Скрипт может быть подобен следующему и содержаться в файле шаблона сообщения (впрочем, саму функцию замены можно вытащить в файл шаблона книги, а вызывать её уже после каждого сообщения из шаблона сообщения):

<!-- начало файла шаблона сообщения -->
<form name="inside"><input name="message" type=hidden value="{URL}"></form>
<script language="JavaScript">

// функция замены &lt; &gt; обратно на символы < >
// она собрана только из стандартных функций и тестирована на IE, Opera и Netscape
function st(s)
{
	// делаем замену &lt; на <
	p = s.indexOf("&lt;",0);
	while(p > 0)
	{
		s = s.substring(0,p) + "<" + s.substring(p+4,s.length-1);
		p = s.indexOf("&lt;",0);
	}

	// то же самое, но с &gt;
	p = s.indexOf("&gt;",0);
	while(p > 0)
	{
		s = s.substring(0,p) + ">" + s.substring(p+4,s.length-1);
		p = s.indexOf("&lt;",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-ю страницу, и так далее!

ymi aka iКот
la-murr.narod.ru, ymi.narod.ru
24.06.01
Опубликовано 20.08.01

P.S. Ссылка на гостевую книгу сайта la-murr.narod.ru не означает, что там использована описанная технология; иногда фреймование сайта - не признак дурного вкуса, а изящное решение для облегчения подготовки материалов к опубликованию и уменьшения нагрузки канала: не надо по несколько раз грузить одни и те же текстовые элементы ;o)


Гостевая книга как замена SSI / Комментарии

show(52234); ?>


Верх >>

 

 




Архив >>



Найти:
в Газете  по Народу.Ру
на Яндексе



(с) Народная газета
(с) Народ.Ру
Дизайн - Студия Артемия Лебедева