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-страницы?параметры
21 title - в элемент с таким классом помещается заголовок темы. Тот же
22 самый заголовок помещается в элемент <title> в <head>
25 <h1 class="title">Тема форума</H1>
28 На странице темы должен присутствовать блоковый элемент с классом
29 message. Подстановка конкретного сообщения производится внутрь этого
30 элемента. При появлении в теме следующего сообщения этот элемент
31 копируется и копия вставляется сразу после предыдущего.
33 Элементу приписывается атрибут id, содержащий уникальный идентификатор
36 Внутри элемента с классом message должны содержаться следующие элементы
38 manchor - якорь на который будут формироваться ссылки на это сообщение.
39 Атрибут name заменяется на идентификтаор этого сообщения
40 mlink - ссылка на это сообщение. Атрибут href заменяется на
41 author - ник автора сообщения. innerHtml заменяется на ник автора
42 Следует учитывать что в случае openId авторизации в этот элемент
43 будет помещен элемент a со ссылкой на домашнюю страницу
44 mdate - дата публикации сообщения innerHtml заменяется на дату
45 avatar - элемент img атрибут src которого заменияется на аватар автора
46 astatus - статус автора на форуме innerHtml заменяется на статус
47 acomment - комментарий к нику, введенный автором при регистрации.
48 innerHtml заменяется на комментарий
49 msubject - тема сообщения. Заменяется innerHtml
50 mtext - текст сообщения. innerHtml заменяется на отформатированный текст
51 mreply - ссылка на скрипт ответа. Атрибут href будет заменен на
52 корректную url. Элемент id заменяется на reply<идентификатор
57 <div class="message" id="0001">
58 <a name="00001" class="manchor"></a>
59 <h2 class="msubject>Тема сообщения</h2>
60 Автор <span class="mauthor">В Пупкин</span>
61 (<span class="acomment">Пользователь форума</acomment>,
62 <span class"astatus">Модератор</span>)
63 <img align=left class=avatar src="/forum/users/v_pupkin.jpg">
65 Текст сообщения с <b>выделениями</b>
67 <a href="/forum/f1/topic1.html#0001" class="mlink">ссылка на это
69 <a href="/cgi-bin/forum/f1/topic1.html?reply=reply&id=0001"
70 сlass="mreply">ответить</a>
71 <form class="actions" name="fa0001" action="/cgi-bin/forum/f1/topic1.html">
72 <!-- .... см ниже .... -->
73 <input type="hidden" name="id" value="0001">
74 <input type="hidden" name="author" value="В. Пупкин">
75 <input type="submit" name="edit" value="Редактировать">
76 <input type="submit" name="delete" value="Удалить">
77 <input type="submit" name="move" value="Переместить в другую тему">
81 Кроме того, в элементе c классом message должна присутствовать форма
83 В ней должны присутсвовать следующие поля
85 2. Скрытое поле author
89 6. Кнопка reply (заменяет собой ссылку с классом mreply)
93 Клиент-сайд скрипт должен уметь скрывать кнопку move, если пользователь
94 не является модератором, а также кнопки edit и delete, если
95 пользователь не является автором сообщения, т.е. значение куки
96 sluser не совпадает с содержимым скрытого поля author
98 Для того чтобы узнать является ли текущий пользователь модератором
99 данного форума, нужно запросить с сервера (через XmlHttpRequest)
100 файл .moderators лежащий рядом с текущим файлом и далее вверх по
101 иерархии. Эти файлы представляют собой простые текстовые файлы с именем
102 пользователя в каждой строке.
104 В корне форума имеется аналогичный файл .admins.
106 Можно также запросить файл .banned.
108 Все эти действия являются необязательными. Если на клиентской стороне
109 они не будут выполнены и у пользователя появится возможность нажать на
110 кнопку выполнения операции, на которую у него нет прав, операция будет
111 заблокирована на сервере.
115 Если кука sluser не определена,
116 то желательно также скрыть кнопку reply и ссылку с классом mreply.
118 Кроме того на странице могут присутствовать элементы a с классами
119 next и prev. В случае если тема разрослась более чем на одну страницу,
120 их href-атрибуты заменяются на ссылки на предыдущую следующую страницу.
121 Если тема состоит из одной страницы, ссылки будут вести на неё же.
123 Как вариант, можно использовать классы bnext и bprev. Если нет
124 предыдущей/следующей страницы, элементы a с такими классами будут
127 Страница списка тем (головная страница форума)
129 Может иметь элемент с классом message, описывающий форум в целом (его
130 создатель, вводный текст и т.д.
132 Шаблоном описания конкретной темы является элемент с классом topic,
133 устроенный аналогично message (показывается текст и автор первой реплики
134 темы) с той разницей, что элемент с классом subject должен быть ссылкой.
136 Внутри элемента с классом topic должна присутствовать форма
137 с кнопками edit delete move setrights и скрытым полем id.
138 Кнопку setrights следует показывать только пользователю с правами
142 Кроме этого, cтраница должна иметь ссылку с классом newtopic или форму с именем
143 newtopic и кнопкой submit с именем newtopic
146 Страница списка форумов (головная страница сайта, страница форума с
149 Устроена аналогично странице списка тем.
151 Элемент списка форумов должен иметь класс forum, а форма/ссылка для
152 создания нового форума соотвесттвенно имя/класс newforum.
154 Допускается также ситуация когда на одной странице присутствует и список
155 форумов, и список тем. (В этом случае если физически отсутствуют либо
156 те, либо другие, соответствующему элементу-шаблону выставляется
157 style="visibility: hidden");
159 Кроме этого на всех страницах рекомендуется иметь элемент-ссылку, который
160 отображает текущее имя пользователя. Этот элемент должен
161 конфигурироваться client-side cкриптом и показывать либо текст
162 "Зарегистрироваться" и аналогичный и вести на
163 /cgi-bin/forum/<адрес текущей страницы?login=1
164 либо имя пользователя и вести на
165 /cgi-bin/forum/<aдрес текущей страницы?user=1
167 Шаблоны служебных страниц (т.е. форм регистрации, логина и т.д.)
169 Служебные страницы форума (т.е. формы, выводимые скриптами) также
170 оформляются с помощью HTML-шаблонов. Если страница выдается в результате
171 POST-запроса уже содержащего требуемые данные, значения соответствующих
172 элементов ввода заменяются на эти данные.
174 В случае если во введенных данных произошла ошибка, сообщение об ошибке
175 скрипт вписывает в элемент с классом error вместо его innerHtml
177 Во всем шаблоне формы производится подстановка информации о текущем
178 пользователе, аналогично тому, как она производится в элементе с классом
179 message в шаблоне темы.
181 Как правило, все скрипты получают следующую информацию
182 1. Поле с именем операции и произвольным непустым значением
198 2. Поле id с идентификатором комментария/темы/форума
200 Это поле должно быть обязательно проброшено через форму как скрытое
203 3. Поле returnto - url куда направить пользователя после успешного
204 завершения операции. Если эта форма присутствует в шаблоне, но скрипт
205 вызывается без соответствующего значения в url или postdata, это поле
206 заполняется значением заголовка referer http-запроса.
208 Скрипт регистрации (операция login)
209 Форма с именем login содержит поля name и password
210 Может также содержать checkbox с именем ipbind (привязка
211 авторизационной куки к IP)
213 (OpenID пока не описываем)
215 Кнопка submit называется login
217 Форма регистрации нового пользователя (операция register, форма с
221 avatar (поле ввода URL) или avatarfile(file upload field)
223 Может также содержать любые дополнительные поля информации о
224 пользователе (кроме поля status). Они будут сохранены в списке пользователей
225 и могут потом выводиться в шаблонах рядом с информацией об авторе.
226 Скрытое поле required содержит список полей, которые обязательно
227 требуются при регистрации. Поля user, pass1 и pass2 туда включать не
229 Скрытое поле ignore содержит список полей, которые НЕ НУЖНО
230 сохранять в качестве информации о пользователе.
232 Скрипт отправки комментария
234 поля subject text (тэг textarea)
235 Можно также включать (динамически добавлять) поля file upload image1
237 кнопка submit называется reply
239 Скрипт создания новой темы или нового форума
241 поля subject text imageN и urlname. В последнее поле следует запретить
242 ввод символов нелатинского алфавита '/' и '?'
244 Cкрипт просмотра списка пользователей (опция userlist)
246 Элемент с классом user содержит элементы с классами, имена которых
247 соответствуют именам свойств пользователей.
248 Если внутри элемента присутствует элемент с классом formoder или
249 foradmin, то при просмотре страницы пользователем, не имеющим
250 соответствующих прав, этот кусок выкусывается на сервере.
251 Должен присутствовать элемент именем profile имеющий тип a.
252 Его атрибут href заменяется на ссылку на скрипт редактирования
253 профайла. Форм этот шаблон вообще не содержит
255 Скрипт раздачи прав модерирования (setrights)
257 Дает права модераторов на определенный форум/тему, или права
260 В результате заполнения формы поле с именем moderators должно
261 содержать список модераторов для данной темы (соответствующей
262 url страницы id) поле с именем administrators список всех
263 администраторов данного сайта.
265 Скрипт редактирования свойств пользователя.
266 Аналогичен скрипту регистрации, но администратору еще видно поле
267 status. (пользователю - тоже видно, но input или select заменяется на
270 Может присутствовать кнопка resetpassword (показывается только
274 Встраивание служебных форм непосредственно в страницы форума
276 Форма, содержащая вышеперечиленные поля, имеющая метод POST и имеющая в поле
277 action="forum/<url страницы, где она размещена)
278 может быть встроена непосредственно в страницу темы или списка
279 тем/списка форумов. Желательно чтобы она делалась видимой только при
280 нажатии кнопки. Отправка этой формы приводит к выполнению необходимого
281 действия без показа страницы скрипта.
285 Шаблон с именем error.html используется для выдачи фатальных ошибок
286 скрипта. (когда нет возможности показать форму). Он должен содержать
287 элемент с классом error, innerHTML которого будет заменен на сообщение