Описание шаблонов форума Шаблоны форума представляют собой обыкновенные HTML-файлы. В них должны присутствовать элементы с определенными классами и поля форм с определенными именами. Скрипты форума вставляют в эти файлы информацию руководствуясь классами элементов и именами полей форм. Шаблоны страниц: 1. Страница темы title - в элемент с таким классом помещается заголовок темы. Тот же самый заголовок помещается в элемент в <head> Например <h1 class="title">Тема форума</H1> message На странице темы должен присутствовать блоковый элемент с классом message. Подстановка конкретного сообщения производится внутрь этого элемента. При появлении в теме следующего сообщения этот элемент копируется и копия вставляется сразу после предыдущего. Элементу приписывается атрибут id, содержащий уникальный идентификатор данного сообщения Внутри элемента с классом message должны содержаться следующие элементы manchor - якорь на который будут формироваться ссылки на это сообщение. Атрибут name заменяется на идентификтаор этого сообщения mlink - ссылка на это сообщение. Атрибут href заменяется на mauthor - ник автора сообщения. 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, если пользователь не является автором сообщения, т.е. значение куки forum_author не совпадает с содержимым скрытого поля author Для того чтобы определить, является ли пользователь модератором данной страницы, нужно включить в html следующий элемент <script src="/cgi-bin/forum/<url текущей страницы>?getrights=1"></script> Полученый по этой url скрипт выставляет две глобальные переменные moderator и administrator в значение true, если пользователь имеет соответствущие права на данную тему и false, если не имеет. Кроме того этот скрипт выставляет глобальную переменную author, которая имеет значение идентификатора автора, что избавляет client-side cкрипт от самостоятельного анализа cookies. Манипулирование формами должно производиться из обработчика body onLoad чтобы скрипт getrights успел загрузиться. Если кука FORUM_AUTHOR или глобальная переменная author не определены, то желательно также скрыть кнопку 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-запроса уже содержащего требуемые данные, значения соответствующих элементов ввода заменяются на эти данные. В случае если во введенных данных произошла ошибка, сообщение об ошибке скрипт вписывает в элемент с классом errmsg вместо его innerHtml Как правило, все скрипты получают следующую информацию 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) Содержит поля name password password2 comment avatar (file upload field) email Может также содержать любые дополнительные поля информации о пользователе (кроме поля status). Они будут сохранены в списке пользователей и могут потом выводиться в шаблонах рядом с информацией об авторе. Скрипт отправки комментария поля 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="/cgi-bin/forum/<url страницы, где она размещена) может быть встроена непосредственно в страницу темы или списка тем/списка форумов. Желательно чтобы она делалась видимой только при нажатии кнопки. Отправка этой формы приводит к выполнению необходимого действия без показа страницы скрипта.