Описание шаблонов форума Шаблоны форума представляют собой обыкновенные HTML-файлы. В них должны присутствовать элементы с определенными классами и поля форм с определенными именами. Скрипты форума вставляют в эти файлы информацию руководствуясь классами элементов и именами полей форм. Во всех шаблонах производится правка относительных URL в элементах img src, a href, link href, form action. В URL начинающихся со слова templates заменяются на значение templateurl из конфигурации форума, URL, начинающиеся со слова users - на userurl, со слова forum - на путь к скрипту форума. Остальные относительные (т.е. не начинающиеся c http: или / url дополняются путем к корневому каталогу форума. Cсылки вида forum?параметры будут заменены на url-скрипта/url-страницы?параметры Шаблоны страниц: 1. Страница темы title - в элемент с таким классом помещается заголовок темы. Тот же самый заголовок помещается в элемент в <head> Например <h1 class="title">Тема форума</H1> message На странице темы должен присутствовать блоковый элемент с классом message. Подстановка конкретного сообщения производится внутрь этого элемента. При появлении в теме следующего сообщения этот элемент копируется и копия вставляется сразу после предыдущего. Элементу приписывается атрибут id, содержащий уникальный идентификатор данного сообщения Внутри элемента с классом message должны содержаться следующие элементы manchor - якорь на который будут формироваться ссылки на это сообщение. Атрибут name заменяется на идентификтаор этого сообщения mlink - ссылка на это сообщение. Атрибут href заменяется на author - ник автора сообщения. innerHtml заменяется на ник автора Следует учитывать что в случае openId авторизации в этот элемент будет помещен элемент a со ссылкой на домашнюю страницу mdate - дата публикации сообщения innerHtml заменяется на дату avatar - элемент img атрибут src которого заменияется на аватар автора astatus - статус автора на форуме innerHtml заменяется на статус acomment - комментарий к нику, введенный автором при регистрации. innerHtml заменяется на комментарий msubject - тема сообщения. Заменяется innerHtml mtext - текст сообщения. innerHtml заменяется на отформатированный текст mreply - ссылка на скрипт ответа. Атрибут href будет заменен на корректную url. Элемент id заменяется на reply<идентификатор сообщения> Например: <div class="message" id="0001"> <a name="00001" class="manchor"></a> <h2 class="msubject>Тема сообщения</h2> Автор <span class="mauthor">В Пупкин</span> (<span class="acomment">Пользователь форума</acomment>, <span class"astatus">Модератор</span>) <img align=left class=avatar src="/forum/users/v_pupkin.jpg"> <div class="mtext"> Текст сообщения с <b>выделениями</b> </div> <a href="/forum/f1/topic1.html#0001" class="mlink">ссылка на это сообщение</a> <a href="/cgi-bin/forum/f1/topic1.html?reply=reply&id=0001" сlass="mreply">ответить</a> <form class="actions" name="fa0001" action="/cgi-bin/forum/f1/topic1.html"> <!-- .... см ниже .... --> <input type="hidden" name="id" value="0001"> <input type="hidden" name="author" value="В. Пупкин"> <input type="submit" name="edit" value="Редактировать"> <input type="submit" name="delete" value="Удалить"> <input type="submit" name="move" value="Переместить в другую тему"> </form> </div> Кроме того, в элементе c классом message должна присутствовать форма с классом actions. В ней должны присутсвовать следующие поля 1. Скрытое поле id 2. Скрытое поле author 3. Кнопка edit 4. Кнопка delete 5. Кнопка move 6. Кнопка reply (заменяет собой ссылку с классом mreply) Клиент-сайд скрипт должен уметь скрывать кнопку move, если пользователь не является модератором, а также кнопки edit и delete, если пользователь не является автором сообщения, т.е. значение куки sluser не совпадает с содержимым скрытого поля author Для того чтобы узнать является ли текущий пользователь модератором данного форума, нужно запросить с сервера (через XmlHttpRequest) файл .moderators лежащий рядом с текущим файлом и далее вверх по иерархии. Эти файлы представляют собой простые текстовые файлы с именем пользователя в каждой строке. В корне форума имеется аналогичный файл .admins. Можно также запросить файл .banned. Все эти действия являются необязательными. Если на клиентской стороне они не будут выполнены и у пользователя появится возможность нажать на кнопку выполнения операции, на которую у него нет прав, операция будет заблокирована на сервере. Если кука sluser не определена, то желательно также скрыть кнопку reply и ссылку с классом mreply. Кроме того на странице могут присутствовать элементы a с классами next и prev. В случае если тема разрослась более чем на одну страницу, их href-атрибуты заменяются на ссылки на предыдущую следующую страницу. Если тема состоит из одной страницы, ссылки будут вести на неё же. Как вариант, можно использовать классы bnext и bprev. Если нет предыдущей/следующей страницы, элементы a с такими классами будут заменены на span. Страница списка тем (головная страница форума) Может иметь элемент с классом message, описывающий форум в целом (его создатель, вводный текст и т.д. Шаблоном описания конкретной темы является элемент с классом topic, устроенный аналогично message (показывается текст и автор первой реплики темы) с той разницей, что элемент с классом subject должен быть ссылкой. Внутри элемента с классом topic должна присутствовать форма с кнопками edit delete move setrights и скрытым полем id. Кнопку setrights следует показывать только пользователю с правами администратора. Кроме этого, cтраница должна иметь ссылку с классом newtopic или форму с именем newtopic и кнопкой submit с именем newtopic Страница списка форумов (головная страница сайта, страница форума с подразделами) Устроена аналогично странице списка тем. Элемент списка форумов должен иметь класс forum, а форма/ссылка для создания нового форума соотвесттвенно имя/класс newforum. Допускается также ситуация когда на одной странице присутствует и список форумов, и список тем. (В этом случае если физически отсутствуют либо те, либо другие, соответствующему элементу-шаблону выставляется style="visibility: hidden"); Кроме этого на всех страницах рекомендуется иметь элемент-ссылку, который отображает текущее имя пользователя. Этот элемент должен конфигурироваться client-side cкриптом и показывать либо текст "Зарегистрироваться" и аналогичный и вести на /cgi-bin/forum/<адрес текущей страницы?login=1 либо имя пользователя и вести на /cgi-bin/forum/<aдрес текущей страницы?user=1 Шаблоны служебных страниц (т.е. форм регистрации, логина и т.д.) Служебные страницы форума (т.е. формы, выводимые скриптами) также оформляются с помощью HTML-шаблонов. Если страница выдается в результате POST-запроса уже содержащего требуемые данные, значения соответствующих элементов ввода заменяются на эти данные. В случае если во введенных данных произошла ошибка, сообщение об ошибке скрипт вписывает в элемент с классом error вместо его innerHtml Во всем шаблоне формы производится подстановка информации о текущем пользователе, аналогично тому, как она производится в элементе с классом message в шаблоне темы. Как правило, все скрипты получают следующую информацию 1. Поле с именем операции и произвольным непустым значением Возможные операции reply edit delete move newtopic newforum getrights login register userlist profile setrights 2. Поле id с идентификатором комментария/темы/форума Это поле должно быть обязательно проброшено через форму как скрытое поле. 3. Поле returnto - url куда направить пользователя после успешного завершения операции. Если эта форма присутствует в шаблоне, но скрипт вызывается без соответствующего значения в url или postdata, это поле заполняется значением заголовка referer http-запроса. Скрипт регистрации (операция login) Форма с именем login содержит поля name и password Может также содержать checkbox с именем ipbind (привязка авторизационной куки к IP) (OpenID пока не описываем) Кнопка submit называется login Форма регистрации нового пользователя (операция register, форма с именем register) Содержит поля user pass1 pass2 comment avatar (поле ввода URL) или avatarfile(file upload field) email Может также содержать любые дополнительные поля информации о пользователе (кроме поля status). Они будут сохранены в списке пользователей и могут потом выводиться в шаблонах рядом с информацией об авторе. Скрытое поле required содержит список полей, которые обязательно требуются при регистрации. Поля user, pass1 и pass2 туда включать не следует. Скрытое поле ignore содержит список полей, которые НЕ НУЖНО сохранять в качестве информации о пользователе. Скрипт отправки комментария поля subject text (тэг textarea) Можно также включать (динамически добавлять) поля file upload image1 image2 etc. кнопка submit называется reply Скрипт создания новой темы или нового форума поля subject text imageN и urlname. В последнее поле следует запретить ввод символов нелатинского алфавита '/' и '?' Cкрипт просмотра списка пользователей (опция userlist) Элемент с классом user содержит элементы с классами, имена которых соответствуют именам свойств пользователей. Если внутри элемента присутствует элемент с классом formoder или foradmin, то при просмотре страницы пользователем, не имеющим соответствующих прав, этот кусок выкусывается на сервере. Должен присутствовать элемент именем profile имеющий тип a. Его атрибут href заменяется на ссылку на скрипт редактирования профайла. Форм этот шаблон вообще не содержит Скрипт раздачи прав модерирования (setrights) Дает права модераторов на определенный форум/тему, или права администраторов. В результате заполнения формы поле с именем moderators должно содержать список модераторов для данной темы (соответствующей url страницы id) поле с именем administrators список всех администраторов данного сайта. Скрипт редактирования свойств пользователя. Аналогичен скрипту регистрации, но администратору еще видно поле status. (пользователю - тоже видно, но input или select заменяется на обычный текст) Может присутствовать кнопка resetpassword (показывается только администраторам) Встраивание служебных форм непосредственно в страницы форума Форма, содержащая вышеперечиленные поля, имеющая метод POST и имеющая в поле action="forum/<url страницы, где она размещена) может быть встроена непосредственно в страницу темы или списка тем/списка форумов. Желательно чтобы она делалась видимой только при нажатии кнопки. Отправка этой формы приводит к выполнению необходимого действия без показа страницы скрипта. Служебные шаблоны Шаблон с именем error.html используется для выдачи фатальных ошибок скрипта. (когда нет возможности показать форму). Он должен содержать элемент с классом error, innerHTML которого будет заменен на сообщение об ошибке.