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 ap-status - статус автора на форуме innerHtml заменяется на статус
49 ap-comment - комментарий к нику, введенный автором при регистрации.
50 innerHtml заменяется на комментарий
51 И прочие классы с префиксом ap-, innerHtml которых заменяеняется
52 на соответствущие поля из профайла автора. Если поле имеет в имени
53 подчерк, допустимо вместо подчерка использовать дефис "-" в названии
57 msubject - тема сообщения. Заменяется innerHtml
58 mtext - текст сообщения. innerHtml заменяется на отформатированный текст
59 mreply - ссылка на скрипт ответа. Атрибут href будет заменен на
60 корректную url. Элемент id заменяется на reply<идентификатор
65 <div class="message" id="0001">
66 <a name="00001" class="manchor"></a>
67 <h2 class="msubject>Тема сообщения</h2>
68 Автор <span class="mauthor">В Пупкин</span>
69 (<span class="acomment">Пользователь форума</acomment>,
70 <span class"astatus">Модератор</span>)
71 <img align=left class=avatar src="/forum/users/v_pupkin.jpg">
73 Текст сообщения с <b>выделениями</b>
75 <a href="/forum/f1/topic1.html#0001" class="mlink">ссылка на это
77 <a href="/cgi-bin/forum/f1/topic1.html?reply=reply&id=0001"
78 сlass="mreply">ответить</a>
79 <form class="actions" name="fa0001" action="/cgi-bin/forum/f1/topic1.html">
80 <!-- .... см ниже .... -->
81 <input type="hidden" name="id" value="0001">
82 <input type="hidden" name="author" value="В. Пупкин">
83 <input type="submit" name="edit" value="Редактировать">
84 <input type="submit" name="delete" value="Удалить">
85 <input type="submit" name="move" value="Переместить в другую тему">
89 Кроме того, в элементе c классом message должна присутствовать форма
91 В ней должны присутсвовать следующие поля
93 2. Скрытое поле author
97 6. Кнопка reply (заменяет собой ссылку с классом mreply)
101 Клиент-сайд скрипт должен уметь скрывать кнопку move, если пользователь
102 не является модератором, а также кнопки edit и delete, если
103 пользователь не является модератором или автором сообщения(т.е. значение куки
104 sluser не совпадает с содержимым скрытого поля author)
107 Определять какие кнопки и ссылки являются ссылками на форумный скрипт
108 и должны скрываться и показываться в зависимости от прав доступа,
109 следует по атрибуту href ссылки и атрибуту action формы в сочетании с
110 атрибутом name у соответствующей кнопки. (кнопкой считаются input
111 type=submit и input type=image).
113 В разделе head у шаблона должны присутствовать тэги link вида
114 1. <link href="forum" rel="forum-script">
115 По общим правилам подстановки серверный скрипт при обработке шаблона
116 заменит href этого элемента на собственную url.
118 Соответственно формы с action равной этой URL следует рассматривать
119 как подлежащие обработке и искать в них кнопки с именами,
120 соответствующими именам операций. И ссылки с href=эта url?параметры
121 В ссылке следует искать параметр вида имя-операции.
122 2. <link href="forum" rel="forum-user-list">
123 Содержимое href этого скрипта может быть использовано client-side
124 скриптом для формирования ссылки на страничку локального
125 пользователя форума (в случае если имя пользователя начинается с
126 http:://, это OpenID-пользователь и его страничка находстия по URL,
127 совпрадающей с именем пользователя.
132 Если кука sluser не определена,
133 то желательно также скрыть кнопку reply и ссылку с классом mreply, если
134 только в шаблоне формы reply не предусмотрены поля, позволяющие
135 залогиниться в момент отправки реплики.
137 Для получения информации о правах текущего пользователя в форуме нужно
138 запросить (через XMLHttpRequest) файл perms.txt из текущей директории
139 (где расположена текущая страница) и выше по иерархии вплоть до корня
140 форма. Корнем форума является директория, где расположен файл .forum
141 (не обязательно доступный для чтения по http. Ответ сервера 403 как и
142 ответ 200 надо рассматривать как "файл найден")
144 Кроме того на странице могут присутствовать элементы a с классами
145 next и prev. В случае если тема разрослась более чем на одну страницу,
146 их href-атрибуты заменяются на ссылки на предыдущую следующую страницу.
147 Если тема состоит из одной страницы, ссылки будут вести на неё же.
149 Как вариант, можно использовать классы bnext и bprev. Если нет
150 предыдущей/следующей страницы, элементы a с такими классами будут
153 Страница списка тем (головная страница форума)
155 Может иметь элемент с классом annotation, описывающий форум в целом (его
156 создатель, вводный текст и т.д. устроенный внутри аналогично элементу
157 списка форумов (см ниже). Если в шаблоне присутствует элемент meta
158 name="description", то туда помещается текстовое представление аннотации
161 Если в шаблоне присутствуют элементы с классом top-page, то они будут
162 сохранены только на головной странице форума, а при создании подфорумов
163 будут из их оглавлений удаляться.
165 Шаблоном описания конкретной темы является элемент с классом topic,
166 Содержащий элемент с классом title (название темы, должно быть
167 ссылкой), abstract (аннотация темы)
168 author (ссылка), date (дата создания темы), tlink (якорь для ссылок на
169 элемент списка тем ), last-updated и msgcount.
171 Внутри элемента с классом topic должна присутствовать форма
172 с кнопками edit delete move setrights и скрытым полем id.
173 Кнопку setrights следует показывать только пользователю с правами
178 элемент с классом topic должен быть заключен в элемент с классом
181 При отсутствии тем на странице элементу с классом topiclist сервер
182 приписывает атрибут style="display: none;".
184 При добавлении новой темы элемент с классом topic копируется и
185 вставляется непосредственно за предыдущим
188 Кроме этого, cтраница должна иметь ссылку на форумный скрипт с
189 параметром newtopic=1 или форму с именем
190 topicinfo и кнопкой submit с именем newtopic
192 Список подфорумов устроен аналогично списку тем.
194 Элемент списка форумов должен иметь класс forum, а форма/ссылка для
195 создания нового форума соотвесттвенно имя/класс newforum, а объемлющий
196 элемент, который скрывается при отсутствии подфорумов - класс forumlist
198 В шаблоне элемента списка форумов может присутствовать элемент img
199 с классом logo. Если такой элемент обнаружен, то при наличии в
200 директории форума файла logo с расширением png, jpg или gif, в src
201 пропиcывается ссылка на этот файл. Иначе прописывается ссылка на
204 Допускается также ситуация когда на одной странице присутствует и список
205 форумов, и список тем. (В этом случае если физически отсутствуют либо
206 те, либо другие, соответствующему элементу-шаблону выставляется
207 style="display: none");
209 Кроме этого на всех страницах рекомендуется иметь элемент-ссылку, который
210 отображает текущее имя пользователя. Этот элемент должен
211 конфигурироваться client-side cкриптом и показывать либо текст
212 "Зарегистрироваться" и аналогичный и вести на
213 /cgi-bin/forum/<адрес текущей страницы?login=1
214 либо имя пользователя и вести на
215 /cgi-bin/forum/<aдрес текущей страницы?user=1
217 Шаблоны служебных страниц (т.е. форм регистрации, логина и т.д.)
219 Служебные страницы форума (т.е. формы, выводимые скриптами) также
220 оформляются с помощью HTML-шаблонов. Если страница выдается в результате
221 POST-запроса уже содержащего требуемые данные, значения соответствующих
222 элементов ввода заменяются на эти данные.
224 В случае если во введенных данных произошла ошибка, сообщение об ошибке
225 скрипт вписывает в элемент с классом error вместо его innerHtml
227 Во всем шаблоне формы производится подстановка информации о текущем
228 пользователе, аналогично тому, как она производится в элементе с классом
229 message в шаблоне темы.
231 Как правило, все скрипты получают следующую информацию
232 1. Поле с именем операции и произвольным непустым значением
248 2. Поле id с идентификатором комментария/темы/форума
250 Это поле должно быть обязательно проброшено через форму как скрытое
253 3. Поле returnto - url куда направить пользователя после успешного
254 завершения операции. Если эта форма присутствует в шаблоне, но скрипт
255 вызывается без соответствующего значения в url или postdata, это поле
256 заполняется значением заголовка referer http-запроса.
258 Обработка форматированного (размеченного) текста:
260 В некоторые поля форм (текст реплики, подпись пользователя) должен
261 вводиться форматированный текст.
263 Такому полю должно соответствовать поле с именим имя_format (например,
264 полю text соотвествует поле text_format, полю signature -
265 signature_format). Поле format может принимать одно из трех значений
266 - html, bbcode и text. Если поле format имеет значение html, то
267 содержимое соответствующего текстового поля рассматривается как html,
268 подвергается чистке от небезопасных тэгов и сохраняется в таком виде.
269 Если поле format имеет значение text, то спецсимволя эскейпятся, а
270 переводы строки заменяются на теги <br>.
272 Если поле имеет значение bbcode, то обрабатываются управляющие
273 последовательности bbcode.
275 Наличие URL в тексте проверяется независимо от формата.
278 Скрипт входа в систему (операция login)
279 Форма с именем login содержит поля name и password
280 Может также содержать checkbox с именем bindip (привязка
281 авторизационной куки к IP)
283 При авторизации по OpenID используется поле openidsite.
284 Его значение интерпретируется как шаблон для операции sprintf, который
285 должен содержать один спецификатор формата %s, куда подставляется имя
288 Если поле openidsite имеет пустое значение, пользователь
289 рассматривается как локальный. Если непустое, то как
292 Кнопка submit называется login
294 Форма регистрации нового пользователя (операция register, форма с
298 Может также содержать любые дополнительные поля информации о
299 пользователе. Они будут сохранены в списке пользователей
300 и могут потом выводиться в шаблонах рядом с информацией об авторе.
301 Скрытое поле required содержит список полей, которые обязательно
302 требуются при регистрации. Поля user, pass1 и pass2 туда включать не
304 Скрытое поле ignore содержит список полей, которые НЕ НУЖНО
305 сохранять в качестве информации о пользователе. Поля user, pass1, pass2
306 и bindip туда включать не нужно. Так же если в форме присутствуют поля
307 avatar и avatarfile, поле avatarfile будет автоматически включено в
308 этот список, а поле avatar при наличии зааплоаженного файла будет
309 заменено на URL к этому файлу.
311 Параметр restricted_userinfo в конфигурационном файле форума позволяет
312 задать список полей, которые пользователь не имеет права редактировать
313 сам, все равно в процессе регистрации или при редактировании профиля.
315 Поля, которые, при их наличии, обрабатываются скриптом форума
318 1. avatar/avatarfile - картинка пользователя. Поле avatarfile
319 (зааплоаженная картинка) имеет приоритет над avatar (внешняя URL)
320 В случае если задано avatarfile, в информации о пользователе
321 сохраняется поле avatar с URL к этой картинке
323 2. signature - обычно поле с форматированным текстом. Дописывается в
324 конец каждого созданного данным пользователем сообщения
326 3. email - если не пусто, то проверяется на корректность посредством
329 4. status - если имеет значение disabled, то данному пользователю
330 запрещен вход на форум до тех пор, пока администратор форума не изменит
331 статус. В случае, если требуется подтверждение регистрации модератором
332 рекомендуется прописывать это поле в restricted_user_info и указывать в
333 конфигурациии форума default_status = disabled,
335 Скрипт отправки комментария
341 Можно также включать (динамически добавлять) поля file upload image1
343 кнопка submit называется reply.
344 Данная форма может также включать поля формы login. Т.е.
345 поддерживается аутентификация пользователя одновременно с отправкой
348 В силу технических ограничений, одновременно с регистрацией по OpenID
349 невозможен upload файлов и отправка комментариев длинной более 2-4Кб.
350 Точный предел размера комментария зависит от длины URL форума и
351 пределов размера URL, установленных при компиляции веб-сервера форума
352 и веб-сервера openid-сервера.
355 Скрипт создания новой темы или нового форума
362 При создании форума еще может присутствовать file upload field
363 logo. Зааплоаженный туда файл помещается в директрию форума
364 с именем logo и расширением соответствующим расширению исходного
368 В последнее поле следует запретить
369 ввод символов нелатинского алфавита '/' и '?'
371 Cкрипт просмотра списка пользователей (опция userlist)
373 Элемент с классом user содержит элементы с классами, имена которых
374 соответствуют именам свойств пользователей.
375 Если внутри элемента присутствует элемент с классом formoder или
376 foradmin, то при просмотре страницы пользователем, не имеющим
377 соответствующих прав, этот кусок выкусывается на сервере.
378 Должен присутствовать элемент именем profile имеющий тип a.
379 Его атрибут href заменяется на ссылку на скрипт редактирования
380 профайла. Форм этот шаблон вообще не содержит
382 Скрипт раздачи прав модерирования (setrights)
384 Дает права модераторов на определенный форум/тему, или права
387 В результате заполнения формы поле с именем moderators должно
388 содержать список модераторов для данной темы (соответствующей
389 url страницы в pathinfo) поле с именем administrators список всех
390 администраторов данного сайта.
392 Скрипт редактирования свойств пользователя.
393 Аналогичен скрипту регистрации, но администратору еще видно поле
394 status. (пользователю - тоже видно, но input или select заменяется на
397 Может присутствовать кнопка resetpassword (показывается только
401 Встраивание служебных форм непосредственно в страницы форума
403 Форма, содержащая вышеперечиленные поля, имеющая метод POST и имеющая в поле
404 action="forum/<url страницы, где она размещена)
405 может быть встроена непосредственно в страницу темы или списка
406 тем/списка форумов. Желательно чтобы она делалась видимой только при
407 нажатии кнопки. Отправка этой формы приводит к выполнению необходимого
408 действия без показа страницы скрипта.
412 Шаблон с именем error.html используется для выдачи фатальных ошибок
413 скрипта. (когда нет возможности показать форму). Он должен содержать
414 элемент с классом error, innerHTML которого будет заменен на сообщение