1 Описание шаблонов форума
3 Шаблоны форума представляют собой обыкновенные HTML-файлы.
4 В них должны присутствовать элементы с определенными классами и поля
5 форм с определенными именами. Скрипты форума вставляют в эти файлы
6 информацию руководствуясь классами элементов и именами полей форм.
8 Во всех шаблонах производится правка относительных URL в элементах
9 img src, a href, link href, form action.
10 В URL начинающихся со слова templates заменяются на значение templateurl
11 из конфигурации форума, URL, начинающиеся со слова users - на userurl,
12 со слова forum - на путь к скрипту форума. Остальные относительные (т.е.
13 не начинающиеся c http: или / url дополняются путем к корневому каталогу
14 форума. Cсылки вида forum?параметры будут заменены на
15 url-скрипта/url-страницы?параметры
22 title - в элемент с таким классом помещается заголовок темы. Тот же
23 самый заголовок помещается в элемент <title> в <head>
26 <h1 class="title">Тема форума</H1>
29 На странице темы должен присутствовать блоковый элемент с классом
30 message. Подстановка конкретного сообщения производится внутрь этого
31 элемента. При появлении в теме следующего сообщения этот элемент
32 копируется и копия вставляется сразу после предыдущего.
34 Элементу приписывается атрибут id, содержащий уникальный идентификатор
37 Внутри элемента с классом message должны содержаться следующие элементы
39 manchor - якорь на который будут формироваться ссылки на это сообщение.
40 Атрибут name заменяется на идентификтаор этого сообщения
41 mlink - ссылка на это сообщение. Атрибут href заменяется на
42 author - ник автора сообщения. innerHtml заменяется на ник автора
43 Следует учитывать что в случае openId авторизации в этот элемент
44 будет помещен элемент a со ссылкой на домашнюю страницу
45 mdate - дата публикации сообщения innerHtml заменяется на дату
46 avatar - элемент img атрибут src которого заменияется на аватар автора,
47 или на templates/1x1.gif если у автора нет аватара.
48 astatus - статус автора на форуме innerHtml заменяется на статус
49 acomment - комментарий к нику, введенный автором при регистрации.
50 innerHtml заменяется на комментарий
51 msubject - тема сообщения. Заменяется innerHtml
52 mtext - текст сообщения. innerHtml заменяется на отформатированный текст
53 mreply - ссылка на скрипт ответа. Атрибут href будет заменен на
54 корректную url. Элемент id заменяется на reply<идентификатор
59 <div class="message" id="0001">
60 <a name="00001" class="manchor"></a>
61 <h2 class="msubject>Тема сообщения</h2>
62 Автор <span class="mauthor">В Пупкин</span>
63 (<span class="acomment">Пользователь форума</acomment>,
64 <span class"astatus">Модератор</span>)
65 <img align=left class=avatar src="/forum/users/v_pupkin.jpg">
67 Текст сообщения с <b>выделениями</b>
69 <a href="/forum/f1/topic1.html#0001" class="mlink">ссылка на это
71 <a href="/cgi-bin/forum/f1/topic1.html?reply=reply&id=0001"
72 сlass="mreply">ответить</a>
73 <form class="actions" name="fa0001" action="/cgi-bin/forum/f1/topic1.html">
74 <!-- .... см ниже .... -->
75 <input type="hidden" name="id" value="0001">
76 <input type="hidden" name="author" value="В. Пупкин">
77 <input type="submit" name="edit" value="Редактировать">
78 <input type="submit" name="delete" value="Удалить">
79 <input type="submit" name="move" value="Переместить в другую тему">
83 Кроме того, в элементе c классом message должна присутствовать форма
85 В ней должны присутсвовать следующие поля
87 2. Скрытое поле author
91 6. Кнопка reply (заменяет собой ссылку с классом mreply)
95 Клиент-сайд скрипт должен уметь скрывать кнопку move, если пользователь
96 не является модератором, а также кнопки edit и delete, если
97 пользователь не является модератором или автором сообщения(т.е. значение куки
98 sluser не совпадает с содержимым скрытого поля author)
101 Определять какие кнопки и ссылки являются ссылками на форумный скрипт
102 и должны скрываться и показываться в зависимости от прав доступа,
103 следует по атрибуту href ссылки и атрибуту action формы в сочетании с
104 атрибутом name у соответствующей кнопки. (кнопкой считаются input
105 type=submit и input type=image).
107 В разделе head у шаблона должны присутствовать тэги link вида
108 1. <link href="forum" rel="forum-script">
109 По общим правилам подстановки серверный скрипт при обработке шаблона
110 заменит href этого элемента на собственную url.
112 Соответственно формы с action равной этой URL следует рассматривать
113 как подлежащие обработке и искать в них кнопки с именами,
114 соответствующими именам операций. И ссылки с href=эта url?параметры
115 В ссылке следует искать параметр вида имя-операции.
116 2. <link href="forum" rel="forum-user-list">
117 Содержимое href этого скрипта может быть использовано client-side
118 скриптом для формирования ссылки на страничку локального
119 пользователя форума (в случае если имя пользователя начинается с
120 http:://, это OpenID-пользователь и его страничка находстия по URL,
121 совпрадающей с именем пользователя.
126 Если кука sluser не определена,
127 то желательно также скрыть кнопку reply и ссылку с классом mreply, если
128 только в шаблоне формы reply не предусмотрены поля, позволяющие
129 залогиниться в момент отправки реплики.
131 Для получения информации о правах текущего пользователя в форуме нужно
132 запросить (через XMLHttpRequest) файл perms.txt из текущей директории
133 (где расположена текущая страница) и выше по иерархии вплоть до корня
134 форма. Корнем форума является директория, где расположен файл .forum
135 (не обязательно доступный для чтения по http. Ответ сервера 403 как и
136 ответ 200 надо рассматривать как "файл найден")
138 Кроме того на странице могут присутствовать элементы a с классами
139 next и prev. В случае если тема разрослась более чем на одну страницу,
140 их href-атрибуты заменяются на ссылки на предыдущую следующую страницу.
141 Если тема состоит из одной страницы, ссылки будут вести на неё же.
143 Как вариант, можно использовать классы bnext и bprev. Если нет
144 предыдущей/следующей страницы, элементы a с такими классами будут
147 Страница списка тем (головная страница форума)
149 Может иметь элемент с классом header, описывающий форум в целом (его
150 создатель, вводный текст и т.д.
152 Шаблоном описания конкретной темы является элемент с классом topic,
153 устроенный аналогично message (показывается текст и автор первой реплики
154 темы) с той разницей, что элемент с классом subject должен быть ссылкой.
156 Внутри элемента с классом topic должна присутствовать форма
157 с кнопками edit delete move setrights и скрытым полем id.
158 Кнопку setrights следует показывать только пользователю с правами
161 элемент с классом topic должен быть заключен в элемент с классом
164 При отсутствии тем на странице элементу с классом topiclist сервер
165 приписывает атрибут style="display: none;".
167 При добавлении новой темы элемент с классом topic копируется и
168 вставляется непосредственно за предыдущим
171 Кроме этого, cтраница должна иметь ссылку с классом newtopic или форму с именем
172 newtopic и кнопкой submit с именем newtopic
174 Список подфорумов устроен аналогично списку тем.
176 Элемент списка форумов должен иметь класс forum, а форма/ссылка для
177 создания нового форума соотвесттвенно имя/класс newforum, а объемлющий
178 элемент, который скрывается при отсутствии подфорумов - класс forumlist
180 В шаблоне элемента списка форумов может присутствовать элемент img
181 с классом logo. Если такой элемент обнаружен, то при наличии в
182 директории форума файла logo с расширением png, jpg или gif, в src
183 пропиcывается ссылка на этот файл. Иначе прописывается ссылка на
186 Допускается также ситуация когда на одной странице присутствует и список
187 форумов, и список тем. (В этом случае если физически отсутствуют либо
188 те, либо другие, соответствующему элементу-шаблону выставляется
189 style="display: none");
191 Кроме этого на всех страницах рекомендуется иметь элемент-ссылку, который
192 отображает текущее имя пользователя. Этот элемент должен
193 конфигурироваться client-side cкриптом и показывать либо текст
194 "Зарегистрироваться" и аналогичный и вести на
195 /cgi-bin/forum/<адрес текущей страницы?login=1
196 либо имя пользователя и вести на
197 /cgi-bin/forum/<aдрес текущей страницы?user=1
199 Шаблоны служебных страниц (т.е. форм регистрации, логина и т.д.)
201 Служебные страницы форума (т.е. формы, выводимые скриптами) также
202 оформляются с помощью HTML-шаблонов. Если страница выдается в результате
203 POST-запроса уже содержащего требуемые данные, значения соответствующих
204 элементов ввода заменяются на эти данные.
206 В случае если во введенных данных произошла ошибка, сообщение об ошибке
207 скрипт вписывает в элемент с классом error вместо его innerHtml
209 Во всем шаблоне формы производится подстановка информации о текущем
210 пользователе, аналогично тому, как она производится в элементе с классом
211 message в шаблоне темы.
213 Как правило, все скрипты получают следующую информацию
214 1. Поле с именем операции и произвольным непустым значением
230 2. Поле id с идентификатором комментария/темы/форума
232 Это поле должно быть обязательно проброшено через форму как скрытое
235 3. Поле returnto - url куда направить пользователя после успешного
236 завершения операции. Если эта форма присутствует в шаблоне, но скрипт
237 вызывается без соответствующего значения в url или postdata, это поле
238 заполняется значением заголовка referer http-запроса.
240 Обработка форматированного (размеченного) текста:
242 В некоторые поля форм (текст реплики, подпись пользователя) должен
243 вводиться форматированный текст.
245 Такому полю должно соответствовать поле с именим имя_format (например,
246 полю text соотвествует поле text_format, полю signature -
247 signature_format). Поле format может принимать одно из трех значений
248 - html, bbcode и text. Если поле format имеет значение html, то
249 содержимое соответствующего текстового поля рассматривается как html,
250 подвергается чистке от небезопасных тэгов и сохраняется в таком виде.
251 Если поле format имеет значение text, то спецсимволя эскейпятся, а
252 переводы строки заменяются на теги <br>.
254 Если поле имеет значение bbcode, то обрабатываются управляющие
255 последовательности bbcode.
257 Наличие URL в тексте проверяется независимо от формата.
260 Скрипт входа в систему (операция login)
261 Форма с именем login содержит поля name и password
262 Может также содержать checkbox с именем bindip (привязка
263 авторизационной куки к IP)
265 При авторизации по OpenID используется поле openidsite.
266 Его значение интерпретируется как шаблон для операции sprintf, который
267 должен содержать один спецификатор формата %s, куда подставляется имя
270 Если поле openidsite имеет пустое значение, пользователь
271 рассматривается как локальный. Если непустое, то как
274 Кнопка submit называется login
276 Форма регистрации нового пользователя (операция register, форма с
280 Может также содержать любые дополнительные поля информации о
281 пользователе. Они будут сохранены в списке пользователей
282 и могут потом выводиться в шаблонах рядом с информацией об авторе.
283 Скрытое поле required содержит список полей, которые обязательно
284 требуются при регистрации. Поля user, pass1 и pass2 туда включать не
286 Скрытое поле ignore содержит список полей, которые НЕ НУЖНО
287 сохранять в качестве информации о пользователе. Поля user, pass1, pass2
288 и bindip туда включать не нужно. Так же если в форме присутствуют поля
289 avatar и avatarfile, поле avatarfile будет автоматически включено в
290 этот список, а поле avatar при наличии зааплоаженного файла будет
291 заменено на URL к этому файлу.
293 Параметр restricted_userinfo в конфигурационном файле форума позволяет
294 задать список полей, которые пользователь не имеет права редактировать
295 сам, все равно в процессе регистрации или при редактировании профиля.
297 Поля, которые, при их наличии, обрабатываются скриптом форума
300 1. avatar/avatarfile - картинка пользователя. Поле avatarfile
301 (зааплоаженная картинка) имеет приоритет над avatar (внешняя URL)
302 В случае если задано avatarfile, в информации о пользователе
303 сохраняется поле avatar с URL к этой картинке
305 2. signature - обычно поле с форматированным текстом. Дописывается в
306 конец каждого созданного данным пользователем сообщения
308 3. email - если не пусто, то проверяется на корректность посредством
311 4. status - если имеет значение disabled, то данному пользователю
312 запрещен вход на форум до тех пор, пока администратор форума не изменит
313 статус. В случае, если требуется подтверждение регистрации модератором
314 рекомендуется прописывать это поле в restricted_user_info и указывать в
315 конфигурациии форума default_status = disabled,
317 Скрипт отправки комментария
323 Можно также включать (динамически добавлять) поля file upload image1
325 кнопка submit называется reply.
326 Данная форма может также включать поля формы login. Т.е.
327 поддерживается аутентификация пользователя одновременно с отправкой
330 В силу технических ограничений, одновременно с регистрацией по OpenID
331 невозможен upload файлов и отправка комментариев длинной более 2-4Кб.
332 Точный предел размера комментария зависит от длины URL форума и
333 пределов размера URL, установленных при компиляции веб-сервера форума
334 и веб-сервера openid-сервера.
337 Скрипт создания новой темы или нового форума
344 При создании форума еще может присутствовать file upload field
345 logo. Зааплоаженный туда файл помещается в директрию форума
346 с именем logo и расширением соответствующим расширению исходного
350 В последнее поле следует запретить
351 ввод символов нелатинского алфавита '/' и '?'
353 Cкрипт просмотра списка пользователей (опция userlist)
355 Элемент с классом user содержит элементы с классами, имена которых
356 соответствуют именам свойств пользователей.
357 Если внутри элемента присутствует элемент с классом formoder или
358 foradmin, то при просмотре страницы пользователем, не имеющим
359 соответствующих прав, этот кусок выкусывается на сервере.
360 Должен присутствовать элемент именем profile имеющий тип a.
361 Его атрибут href заменяется на ссылку на скрипт редактирования
362 профайла. Форм этот шаблон вообще не содержит
364 Скрипт раздачи прав модерирования (setrights)
366 Дает права модераторов на определенный форум/тему, или права
369 В результате заполнения формы поле с именем moderators должно
370 содержать список модераторов для данной темы (соответствующей
371 url страницы в pathinfo) поле с именем administrators список всех
372 администраторов данного сайта.
374 Скрипт редактирования свойств пользователя.
375 Аналогичен скрипту регистрации, но администратору еще видно поле
376 status. (пользователю - тоже видно, но input или select заменяется на
379 Может присутствовать кнопка resetpassword (показывается только
383 Встраивание служебных форм непосредственно в страницы форума
385 Форма, содержащая вышеперечиленные поля, имеющая метод POST и имеющая в поле
386 action="forum/<url страницы, где она размещена)
387 может быть встроена непосредственно в страницу темы или списка
388 тем/списка форумов. Желательно чтобы она делалась видимой только при
389 нажатии кнопки. Отправка этой формы приводит к выполнению необходимого
390 действия без показа страницы скрипта.
394 Шаблон с именем error.html используется для выдачи фатальных ошибок
395 скрипта. (когда нет возможности показать форму). Он должен содержать
396 элемент с классом error, innerHTML которого будет заменен на сообщение