Описание шаблонов форума
Шаблоны форума представляют собой обыкновенные 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 - в элемент с таким классом помещается заголовок темы. Тот же
самый заголовок помещается в элемент
в
Например
Тема форума
message
На странице темы должен присутствовать блоковый элемент с классом
message. Подстановка конкретного сообщения производится внутрь этого
элемента. При появлении в теме следующего сообщения этот элемент
копируется и копия вставляется сразу после предыдущего.
Элементу приписывается атрибут id, содержащий уникальный идентификатор
данного сообщения
Внутри элемента с классом message должны содержаться следующие элементы
manchor - якорь на который будут формироваться ссылки на это сообщение.
Атрибут name заменяется на идентификтаор этого сообщения
mlink - ссылка на это сообщение. Атрибут href заменяется на
author - ник автора сообщения. innerHtml заменяется на ник автора
Следует учитывать что в случае openId авторизации в этот элемент
будет помещен элемент a со ссылкой на домашнюю страницу
mdate - дата публикации сообщения innerHtml заменяется на дату
avatar - элемент img атрибут src которого заменияется на аватар автора,
или на templates/1x1.gif если у автора нет аватара.
ap-status - статус автора на форуме innerHtml заменяется на статус
ap-comment - комментарий к нику, введенный автором при регистрации.
innerHtml заменяется на комментарий
И прочие классы с префиксом ap-, innerHtml которых заменяеняется
на соответствущие поля из профайла автора. Если поле имеет в имени
подчерк, допустимо вместо подчерка использовать дефис "-" в названии
класа.
msubject - тема сообщения. Заменяется innerHtml
mtext - текст сообщения. innerHtml заменяется на отформатированный текст
mreply - ссылка на скрипт ответа. Атрибут href будет заменен на
корректную url. Элемент id заменяется на reply<идентификатор
сообщения>
Например:
Кроме того, в элементе c классом message должна присутствовать форма
с классом actions.
В ней должны присутсвовать следующие поля
1. Скрытое поле id
2. Скрытое поле author
3. Кнопка edit
4. Кнопка delete
5. Кнопка move
6. Кнопка reply (заменяет собой ссылку с классом mreply)
Клиент-сайд скрипт должен уметь скрывать кнопку move, если пользователь
не является модератором, а также кнопки edit и delete, если
пользователь не является модератором или автором сообщения(т.е. значение куки
sluser не совпадает с содержимым скрытого поля author)
Определять какие кнопки и ссылки являются ссылками на форумный скрипт
и должны скрываться и показываться в зависимости от прав доступа,
следует по атрибуту href ссылки и атрибуту action формы в сочетании с
атрибутом name у соответствующей кнопки. (кнопкой считаются input
type=submit и input type=image).
В разделе head у шаблона должны присутствовать тэги link вида
1.
По общим правилам подстановки серверный скрипт при обработке шаблона
заменит href этого элемента на собственную url.
Соответственно формы с action равной этой URL следует рассматривать
как подлежащие обработке и искать в них кнопки с именами,
соответствующими именам операций. И ссылки с href=эта url?параметры
В ссылке следует искать параметр вида имя-операции.
2.
Содержимое href этого скрипта может быть использовано client-side
скриптом для формирования ссылки на страничку локального
пользователя форума (в случае если имя пользователя начинается с
http:://, это OpenID-пользователь и его страничка находстия по URL,
совпрадающей с именем пользователя.
Если кука sluser не определена,
то желательно также скрыть кнопку reply и ссылку с классом mreply, если
только в шаблоне формы reply не предусмотрены поля, позволяющие
залогиниться в момент отправки реплики.
Для получения информации о правах текущего пользователя в форуме нужно
запросить (через XMLHttpRequest) файл perms.txt из текущей директории
(где расположена текущая страница) и выше по иерархии вплоть до корня
форма. Корнем форума является директория, где расположен файл .forum
(не обязательно доступный для чтения по http. Ответ сервера 403 как и
ответ 200 надо рассматривать как "файл найден")
Кроме того на странице могут присутствовать элементы a с классами
next и prev. В случае если тема разрослась более чем на одну страницу,
их href-атрибуты заменяются на ссылки на предыдущую следующую страницу.
Если тема состоит из одной страницы, ссылки будут вести на неё же.
Как вариант, можно использовать классы bnext и bprev. Если нет
предыдущей/следующей страницы, элементы a с такими классами будут
заменены на span.
Страница списка тем (головная страница форума)
Может иметь элемент с классом annotation, описывающий форум в целом (его
создатель, вводный текст и т.д. устроенный внутри аналогично элементу
списка форумов (см ниже). Если в шаблоне присутствует элемент meta
name="description", то туда помещается текстовое представление аннотации
форума.
Если в шаблоне присутствуют элементы с классом top-page, то они будут
сохранены только на головной странице форума, а при создании подфорумов
будут из их оглавлений удаляться.
Шаблоном описания конкретной темы является элемент с классом topic,
Содержащий элемент с классом title (название темы, должно быть
ссылкой), abstract (аннотация темы)
author (ссылка), date (дата создания темы), tlink (якорь для ссылок на
элемент списка тем ), last-updated и msgcount.
Внутри элемента с классом topic должна присутствовать форма
с кнопками edit delete move setrights и скрытым полем id.
Кнопку setrights следует показывать только пользователю с правами
администратора.
элемент с классом topic должен быть заключен в элемент с классом
topiclist.
При отсутствии тем на странице элементу с классом topiclist сервер
приписывает атрибут style="display: none;".
При добавлении новой темы элемент с классом topic копируется и
вставляется непосредственно за предыдущим
Кроме этого, cтраница должна иметь ссылку на форумный скрипт с
параметром newtopic=1 или форму с именем
topicinfo и кнопкой submit с именем newtopic
Список подфорумов устроен аналогично списку тем.
Элемент списка форумов должен иметь класс forum, а форма/ссылка для
создания нового форума соотвесттвенно имя/класс newforum, а объемлющий
элемент, который скрывается при отсутствии подфорумов - класс forumlist
В шаблоне элемента списка форумов может присутствовать элемент img
с классом logo. Если такой элемент обнаружен, то при наличии в
директории форума файла logo с расширением png, jpg или gif, в src
пропиcывается ссылка на этот файл. Иначе прописывается ссылка на
templates/1x1.gif
Допускается также ситуация когда на одной странице присутствует и список
форумов, и список тем. (В этом случае если физически отсутствуют либо
те, либо другие, соответствующему элементу-шаблону выставляется
style="display: none");
Кроме этого на всех страницах рекомендуется иметь элемент-ссылку, который
отображает текущее имя пользователя. Этот элемент должен
конфигурироваться client-side cкриптом и показывать либо текст
"Зарегистрироваться" и аналогичный и вести на
/cgi-bin/forum/<адрес текущей страницы?login=1
либо имя пользователя и вести на
/cgi-bin/forum/.
Если поле имеет значение bbcode, то обрабатываются управляющие
последовательности bbcode.
Наличие URL в тексте проверяется независимо от формата.
Скрипт входа в систему (операция login)
Форма с именем login содержит поля name и password
Может также содержать checkbox с именем bindip (привязка
авторизационной куки к IP)
При авторизации по OpenID используется поле openidsite.
Его значение интерпретируется как шаблон для операции sprintf, который
должен содержать один спецификатор формата %s, куда подставляется имя
пользователя.
Если поле openidsite имеет пустое значение, пользователь
рассматривается как локальный. Если непустое, то как
openid-пользователь.
Кнопка submit называется login
Форма регистрации нового пользователя (операция register, форма с
именем register)
Содержит поля user
pass1 pass2 comment
Может также содержать любые дополнительные поля информации о
пользователе. Они будут сохранены в списке пользователей
и могут потом выводиться в шаблонах рядом с информацией об авторе.
Скрытое поле required содержит список полей, которые обязательно
требуются при регистрации. Поля user, pass1 и pass2 туда включать не
следует.
Скрытое поле ignore содержит список полей, которые НЕ НУЖНО
сохранять в качестве информации о пользователе. Поля user, pass1, pass2
и bindip туда включать не нужно. Так же если в форме присутствуют поля
avatar и avatarfile, поле avatarfile будет автоматически включено в
этот список, а поле avatar при наличии зааплоаженного файла будет
заменено на URL к этому файлу.
Параметр restricted_userinfo в конфигурационном файле форума позволяет
задать список полей, которые пользователь не имеет права редактировать
сам, все равно в процессе регистрации или при редактировании профиля.
Поля, которые, при их наличии, обрабатываются скриптом форума
специальным образом
1. avatar/avatarfile - картинка пользователя. Поле avatarfile
(зааплоаженная картинка) имеет приоритет над avatar (внешняя URL)
В случае если задано avatarfile, в информации о пользователе
сохраняется поле avatar с URL к этой картинке
2. signature - обычно поле с форматированным текстом. Дописывается в
конец каждого созданного данным пользователем сообщения
3. email - если не пусто, то проверяется на корректность посредством
модуля EMail::Valid
4. status - если имеет значение disabled, то данному пользователю
запрещен вход на форум до тех пор, пока администратор форума не изменит
статус. В случае, если требуется подтверждение регистрации модератором
рекомендуется прописывать это поле в restricted_user_info и указывать в
конфигурациии форума default_status = disabled,
Скрипт отправки комментария
Операция reply
поля subject
text (тэг textarea)
text_format
Можно также включать (динамически добавлять) поля file upload image1
image2 etc.
кнопка submit называется reply.
Данная форма может также включать поля формы login. Т.е.
поддерживается аутентификация пользователя одновременно с отправкой
комментария.
В силу технических ограничений, одновременно с регистрацией по OpenID
невозможен upload файлов и отправка комментариев длинной более 2-4Кб.
Точный предел размера комментария зависит от длины URL форума и
пределов размера URL, установленных при компиляции веб-сервера форума
и веб-сервера openid-сервера.
Скрипт создания новой темы или нового форума
поля
subject
text
text_format
urlname.
При создании форума еще может присутствовать file upload field
logo. Зааплоаженный туда файл помещается в директрию форума
с именем logo и расширением соответствующим расширению исходного
файла.
В последнее поле следует запретить
ввод символов нелатинского алфавита '/' и '?'
Cкрипт просмотра списка пользователей (опция userlist)
Элемент с классом user содержит элементы с классами, имена которых
соответствуют именам свойств пользователей.
Если внутри элемента присутствует элемент с классом formoder или
foradmin, то при просмотре страницы пользователем, не имеющим
соответствующих прав, этот кусок выкусывается на сервере.
Должен присутствовать элемент именем profile имеющий тип a.
Его атрибут href заменяется на ссылку на скрипт редактирования
профайла. Форм этот шаблон вообще не содержит
Скрипт раздачи прав модерирования (setrights)
Дает права модераторов на определенный форум/тему, или права
администраторов.
В результате заполнения формы поле с именем moderators должно
содержать список модераторов для данной темы (соответствующей
url страницы в pathinfo) поле с именем administrators список всех
администраторов данного сайта.
Скрипт редактирования свойств пользователя.
Аналогичен скрипту регистрации, но администратору еще видно поле
status. (пользователю - тоже видно, но input или select заменяется на
обычный текст)
Может присутствовать кнопка resetpassword (показывается только
администраторам)
Встраивание служебных форм непосредственно в страницы форума
Форма, содержащая вышеперечиленные поля, имеющая метод POST и имеющая в поле
action="forum/