Модуль "Форум": данные доступные в шаблонах

Главная страница ([раздел]_main.tpl)

Этот тип шаблона является главным для раздела, он содержит данные о категориях форума.

$categories

Массив записей с данными о категориях. Каждая запись представляет собой массив с ключами:

name

Название категории.

urlname

Строковой идентификатор URL категории.

subcategories

Массив записей с данными о подкатегориях. Каждая запись представляет собой массив с ключами:

  • name - название категории;
  • link - ссылка на страницу категории;
  • latname - идентификатор категории;
  • description - описание категории;
  • topics - количество тем в категории;
  • messages - количество сообщений категории;
  • lastmess - запись с данными о последнем сообщении. Структура данных описана ниже.

Пример шаблона

<h1>{$section_name}</h1>
<br>
 
<table class="forum_grid">
{section name=i loop=$categories}
<tr>
<th align="left">{$categories[i].name}</th>
<th width="80">Темы</th>
<th width="80">Сообщения</th>
<th align="left" width="180">Последнее сообщение</th>
</tr>
{section name=j loop=$categories[i].subcategories}
<tr>
<td align="left">
<a href="{$categories[i].subcategories[j].link}">{$categories[i].subcategories[j].name}</a><br>
<div class="note">{$categories[i].subcategories[j].description}</div>
</td>
<td class="colctop">{$categories[i].subcategories[j].topics}</td>
<td class="colcmes">{$categories[i].subcategories[j].messages}</td>
<td>
{if $categories[i].subcategories[j].lastmess}
{$categories[i].subcategories[j].lastmess.date|date_format:"%d.%m.%Y %T"}<br>
<a href="{$categories[i].subcategories[j].lastmess.link}" title="Последнее сообщение">{$categories[i].subcategories[j].lastmess.topic}</a><br>
от {$categories[i].subcategories[j].lastmess.owner.name}
{else}
&nbsp;
{/if}
</td>
</tr>
{/section}
{/section}
</table>

Страница категории ([раздел]_category.tpl)

Этот тип шаблона содержит данные о выбранной категории, а так же список тем, которые принадлежат этой категории.

$category

Массив с данными о текущей категории, состоит из ключей:

name

Название категории.

link

Ссылка на текущую страницу категории.

description

Описание категории.

urlname

Строковой идентификатор URL категории.

$newclosetopic_access

Флаг доступа к добавлению новых и закрытию старых тем (для авторизированного пользователя).

$newtopiclink

Ссылка на страницу добавления новой темы. Если пусто, то нет доступа или пользователь неавторизирован.

$topics

Массив записей с данными о темах. Каждая запись представляет собой массив с ключами:

name

Название темы.

link

ссылка на страницу сообщений в теме.

date

Дата создания темы в формате UTC.

pager

HTML код нумератора страниц сообщений в теме для быстрого перехода.

views

Количество просмотров темы.

messages

Количество сообщений в теме.

owner

Массив с данными пользователя-автора темы, формат аналогичен описанному в руководстве модуля пользователей.

lastmess

Массив с данными о последнем сообщении, состоит из ключей:

  • date - дата добавления сообщения в формате UTC.
  • bbcode - Сообщение в формате BBCode.
  • message - HTML код сообщения.
  • owner - массив с данными пользователя-автора сообщения, формат аналогичен описанному выше.

active

Определяет закрыта ли тема, принимает значения Y/N (N - Закрыта).

closelink

Ссылка на действие по закрытию темы (Доступно только автору темы и модератору).

deletelink

Ссылка на действие по удалению темы (Доступно только модератору).

$topics_pager

Пример шаблона

<h1>{$category.name}</h1>
<br>
 
{if $newtopiclink}
<p align="right"><a href="{$newtopiclink}">Новая тема</a></p>
{/if}
 
{if $topics}
<table class="forum_grid">
<tr>
<th align="left">{$category.name}</th>
<th width="80">Автор</th>
<th width="80">Сообщ./Просм.</th>
<th align="left" width="180">Последнее сообщение</th>
</tr>
{section name=i loop=$topics}
<tr>
<td>
<a href="{$topics[i].link}">{$topics[i].name}</a>{if $topics[i].pager}&nbsp;&nbsp;[ {$topics[i].pager} ]&nbsp;&nbsp;{/if}
{if $topics[i].closelink}
&nbsp;&nbsp;<a href="#" onclick="if(confirm('Закрыть тему?')) document.location='{$topics[i].closelink}'">[Закрыть]</a>&nbsp;
{/if}
{if $topics[i].deletelink}
&nbsp;&nbsp;<a href="#" onclick="if(confirm('Удалить тему?')) document.location='{$topics[i].deletelink}'">[Удалить]</a>&nbsp;
{/if}
</td>
<td class="colctop">{$topics[i].owner.name}</td>
<td class="colcmes">{$topics[i].messages}&nbsp;/&nbsp;{$topics[i].views}</td>
<td>
{if $topics[i].lastmess}
{$topics[i].lastmess.date|date_format:"%D %T"}<br>
от {$topics[i].lastmess.owner.name}
{else}
&nbsp;
{/if}
</td>
</tr>
{/section}
</table>
{object obj=$topics_pager}
{else}
<p>Пока не создано ни одной темы.</p>
{/if}

Страница темы ([раздел]_topic.tpl)

Этот тип шаблона содержит данные о выбранной теме и список сообщений ней, а так же форму добавления нового сообщения.

$category

Массив с данными о текущей категории, структура данных аналогична описанной выше.

$topic

Массив с данными о текущей теме, состоит из ключей:

name

Название темы.

link

Ссылка на текущую страницу темы.

date

Дата создания темы в формате UTC.

active

Определяет закрыта ли тема, принимает значения Y/N (N - Закрыта).

$newclosetopic_access

Флаг доступа к добавлению новых и закрытию старых тем (для авторизированного пользователя).

$newmessage_access

Флаг доступа к добавлению новых сообщений (для авторизированного пользователя).

$usefiles

Флаг использования прикрепенных файлов с проверкой доступа на возможность скачивания.

$newtopiclink

Ссылка на страницу добавления новой темы. Если пусто, то нет доступа или пользователь неавторизирован.

$messages

Массив записей с данными о темах. Каждая запись представляет собой массив с ключами:

date

Дата создания сообщения в формате UTC.

edate

Дата редактирования сообщения в формате UTC.

mdate

Дата модерирования сообщения в формате UTC.

bbcode

Сообщение в формате BBCode.

message

Сообщение в формате HTML.

idfile

Числовой идентификатор прикрепленного файла.

owner

Масив с данными пользователя-автора сообщения, с дополнительными ключами:

  • mcount - Общее количество сообщений у пользователя.
  • link - Ссылка на страницу профиля пользователя.

quotelink

Ссылка на действие по цитированию сообщения (доступно только авторизированному пользователю).

editlink

Ссылка на действие по редактированию сообщения (доступно только последнее сообщение в теме для автора или любое для модератора).

deletelink

Ссылка на действие по удалению сообщения (доступно только последнее сообщение в теме для автора или любое для модератора).

$messages_pager

$preview

Флаг режима предпросмотра.

$form

Массив данных для начальных значений формы, используется так же для режима предпросмотра. В случае предпросмотра копирует некоторые данные из $_REQUEST, поэтому при выводе важно защищать значения с помощью escape. Состоит из ключей:

idedit

Числовой идентификатор редактируемого сообщения.

owner

Масив с данными пользователя-автора сообщения, с дополнительными ключами:

  • mcount - Обзее количество сообщений у пользователя.
  • link - Ссылка на страницу профиля пользователя.

date

Дата создания сообщения в формате UTC.

bbcode

Сообщение в формате BBCode.

message

Сообщение в формате HTML.

tomail

Режим уведомлений о новых сообщениях (Y/N).

$tomail

Массив с данными о режиме уведомлений о новых сообщениях в теме для пользователя. Состоит из ключей:

active

Логическое значение, определяет включено ли уведомление.

link

Ссылка на действие по переключению режима уведомлений в обратное.

Пример шаблона

<h1>{$topic.name}</h1>
<br>
 
{if $preview}
<h4>Предварительный просмотр</h4>
<table class="forum_post">
<tr>
<td class="user_brief" rowspan="2">
{image id=$form.owner.idimg width=120}
<p><b>{$form.owner.name}</b><br>
Сообщений: {$form.owner.mcount}</p>
</td>
<td class="user_post">
<div class="post_date">{$form.date|date_format:"%D %T"}</div>
<div class="post_text">
{$form.message}
</div>
</td>
</tr>
<tr>
<td class="post_panel">
&nbsp;
</td>
</tr>
</table>
{else}
 
{if $newtopiclink}
<p align="right"><a href="{$newtopiclink}">Новая тема</a></p>
{/if}
{if $auth->isLogin()}
<p align="right"><a href="{$tomail.link}">{if $tomail.active}Не получать уведомления о новых сообщениях{else}Получать уведомления о новых сообщениях{/if}</a></p>
{/if}
 
{object obj=$messages_pager}
 
<table class="forum_post">
<tr>
<th>Автор</th>
<th>Текст сообщения</th>
</tr>
{section name=i loop=$messages}
<tr>
<td class="user_brief" rowspan="2">
{image id=$messages[i].owner.idimg width=120}
<p>
{if $auth->isLogin()}
<a href="javascript:InsertEditText($('message'),'[b]{$messages[i].owner.name}[/b],\n',0)"><b>{$messages[i].owner.name}</b></a>
{else}
<b>{$messages[i].owner.name}</b>
{/if}<br>
Сообщений: {$messages[i].owner.mcount}
</p>
</td>
<td class="user_post">
<div class="post_date">
{$messages[i].date|date_format:"%D %T"}
{if $messages[i].edate}
&nbsp;&nbsp;Отредактировано:&nbsp;{$messages[i].edate|date_format:"%D %T"}
{/if}
{if $messages[i].mdate}
&nbsp;&nbsp;Отмодерировано:&nbsp;{$messages[i].mdate|date_format:"%D %T"}
{/if}
</div>
<div class="post_text">
{$messages[i].message}
</div>
</td>
</tr>
<tr>
<td class="post_panel">
{if $usefiles && $messages[i].idfile}
{download id=$messages[i].idfile size=true}&nbsp;
{/if}
{if $messages[i].quotelink}
<a href="{$messages[i].quotelink}">[Цитировать]</a>&nbsp;
{/if}
{if $messages[i].editlink}
<a href="{$messages[i].editlink}">[Редактировать]</a>&nbsp;
{/if}
{if $messages[i].deletelink}
<a href="#" onclick="if(confirm('Удалить сообщение?')) document.location='{$messages[i].deletelink}'">[Удалить]</a>&nbsp;
{/if}
&nbsp;
</td>
</tr>
{/section}
</table>
 
{object obj=$messages_pager}
 
{/if}
<br>
 
{if !$auth->isLogin()}
<p>Вы не можете добавить сообщение. Вам необходимо авторизироваться на сайте под своим логином либо <a href="{$registerlink}">зарегистрироваться</a>.</p>
{elseif $topic.active=='N'}
<p>Тема закрыта.</p>
{elseif !$newmessage_access}
<p>Нет прав для добавления сообщений.</p>
{elseif $auth->isLogin() && $topic.active=='Y' && $newmessage_access}
 
{if !$preview}<a name="messageform"></a>{/if}
{if $form.idedit}
<h3>Редактирование сообщения</h3>
{else}
<h3>Новое сообщение</h3>
{/if}
<br>
{literal}
<script type="text/javascript">
function valid_form(form)
{ if(form.message.value.replace(/\s+/,'').length<5)
  { alert("Пожалуйста, заполните сообщение."); return false; }
  return true;
}
function save(form)
{ if(valid_form(form))
  { form.elements.action.value='addmessage';
    form.submit();
  }
}
function cancel(form)
{ form.elements.action.value='cancel';
  form.submit();
}
</script>
{/literal}
<form class="forum_message" method="post" onsubmit="return valid_form(this)" enctype="multipart/form-data">
<div class="smiles">
<a href="javascript:addSmile(';)')"><img src="/templates/admin/images/smiles/wink.gif" alt="wink" width="20" height="20"></a>
<a href="javascript:addSmile(':)')"><img src="/templates/admin/images/smiles/smile.gif" alt="smile" width="20" height="20"></a>
<a href="javascript:addSmile(':P')"><img src="/templates/admin/images/smiles/tongue.gif" alt="tongue" width="20" height="20"></a>
<a href="javascript:addSmile(':D')"><img src="/templates/admin/images/smiles/biggrin.gif" alt="biggrin" width="20" height="20"></a>
<a href="javascript:addSmile(':lol:')"><img src="/templates/admin/images/smiles/lol.gif" alt="lol" width="20" height="20"></a>
<a href="javascript:addSmile('-_-')"><img src="/templates/admin/images/smiles/closedeyes.gif" alt="closedeyes" width="20" height="20"></a>
<a href="javascript:addSmile('(_(')"><img src="/templates/admin/images/smiles/glare.gif" alt="glare" width="20" height="20"></a>
<a href="javascript:addSmile(':huh:')"><img src="/templates/admin/images/smiles/huh.gif" alt="huh" width="20" height="20"></a>
<a href="javascript:addSmile(':(')"><img src="/templates/admin/images/smiles/sad.gif" alt="sad" width="20" height="20"></a>
<a href="javascript:addSmile(':angry:')"><img src="/templates/admin/images/smiles/angry.gif" alt="angry" width="20" height="20"></a>
<a href="javascript:addSmile('B)')"><img src="/templates/admin/images/smiles/cool.gif" alt="cool" width="20" height="20"></a>
<a href="javascript:addSmile(':unsure:')"><img src="/templates/admin/images/smiles/unsure.gif" alt="unsure" width="20" height="20"></a>
<a href="javascript:addSmile(':o')"><img src="/templates/admin/images/smiles/ohmy.gif" alt="ohmy" width="20" height="20"></a>
<a href="javascript:addSmile(':blink:')"><img src="/templates/admin/images/smiles/blink.gif" alt="blink" width="20" height="20"></a>
<a href="javascript:addSmile(':shok:')"><img src="/templates/admin/images/smiles/shok.gif" alt="shok" width="20" height="20"></a>
</div>
<div>
<input type="button" value=" B " OnClick="addTag('b')">&nbsp;&nbsp;
<input type="button" value=" I " OnClick="addTag('i')">&nbsp;&nbsp;
<input type="button" value=" U " OnClick="addTag('u')">&nbsp;&nbsp;
<input type="button" value=" QUOTE " OnClick="addTag('quote')">&nbsp;&nbsp;
<input type="button" value=" CODE " OnClick="addTag('code')">&nbsp;&nbsp;
</div>
<textarea id="message" name="bbcode" rows="8" style="width:100%">{$form.bbcode|escape}</textarea>
<label><input type="checkbox" name="tomail"{if $tomail.active} checked{/if}>&nbsp;Получать уведомления о новых сообщениях.</label><br>
{if $usefiles}
<br>Прикрепленный файл:<br>
<input type="file" name="attach"><br>
{/if}
<br>
{submit caption="Предварительный просмотр"}
{button caption="Сохранить"  onclick="save(this.form)"}
{if $form.message}
{button caption="Отмена"  onclick="cancel(this.form)"}
{/if}
{hidden name="id" value=$form.idedit}
{hidden name="action" value="preview"}
{hidden name="authcode" value=$system.authcode}
</form>
 
{if $form.message}<script type="text/javascript">document.location='#messageform';</script>{/if}
 
{/if}

Страница новой темы ([раздел]_addtopic.tpl)

Этот типа шаблона содержит данные для страницы добавления новой темы.

$category

Массив с данными о текущей категории, структура данных аналогична описанной выше.

$newclosetopic_access

Флаг доступа к добавлению новых и закрытию старых тем (для авторизированного пользователя).

$usefiles

Флаг использования прикрепенных файлов с проверкой доступа на возможность скачивания.

$preview

Флаг режима предпросмотра.

$form

Массив данных для начальных значений формы, используется так же для режима предпросмотра. В случае предпросмотра копирует некоторые данные из $_REQUEST, поэтому при выводе важно защищать значения с помощью escape. Состоит из ключей:

name

Название темы.

owner

Масив с данными пользователя и дополнительным ключом:

  • mcount - Общее количество сообщений у пользователя.

date

Дата создания темы.

bbcode

Сообщение в формате BBCode.

message

Сообщение в формате HTML.

tomail

Режим уведомлений о новых сообщениях (Y/N).

Пример шаблона

<h1>Новая тема</h1>
<br>
 
{if $preview}
<h3>Предварительный просмотр</h3>
<table class="forum_post">
<tr>
<td class="user_brief" rowspan="2">
{image id=$form.owner.idimg width=120}
<p><b>{$form.owner.name}</b><br>
Сообщений: {$form.owner.mcount}</p>
</td>
<td class="user_post">
<div class="post_date">{$form.date|date_format:"%D %T"}</div>
<div class="post_text">
{$form.message}
</div>
</td>
</tr>
<tr>
<td class="post_panel">
&nbsp;
</td>
</tr>
</table>
{/if}
 
 
{if !$auth->isLogin()}
<p>Вы не можете добавить новую тему. Вам необходимо авторизироваться на сайте под своим логином либо <a href="{$registerlink}">зарегистрироваться</a>.</p>
{elseif !$newclosetopic_access}
<p>Нет прав для добавления новой темы.</p>
{elseif $auth->isLogin() && $newclosetopic_access}
 
{literal}
<script type="text/javascript">
function valid_form(form)
{ if(form.name.value.replace(/\s+/,'').length==0)
  { alert("Пожалуйста, заполните название."); return false; }
  if(form.message.value.replace(/\s+/,'').length<10)
  { alert("Пожалуйста, заполните сообщение."); return false; }
  return true;
}
function save(form)
{ if(valid_form(form))
  { form.elements.action.value='addtopic';
    form.submit();
  }
}
</script>
{/literal}
 
<form class="forum_message" method="post" onsubmit="return valid_form(this)" enctype="multipart/form-data">
<p>Название:</p>
{editbox name="name" width="40%" text=$form.name tabindex="1"}<br>
<br>
<div class="smiles">
<a href="javascript:addSmile(';)')"><img src="/templates/admin/images/smiles/wink.gif" alt="wink" width="20" height="20"></a>
<a href="javascript:addSmile(':)')"><img src="/templates/admin/images/smiles/smile.gif" alt="smile" width="20" height="20"></a>
<a href="javascript:addSmile(':P')"><img src="/templates/admin/images/smiles/tongue.gif" alt="tongue" width="20" height="20"></a>
<a href="javascript:addSmile(':D')"><img src="/templates/admin/images/smiles/biggrin.gif" alt="biggrin" width="20" height="20"></a>
<a href="javascript:addSmile(':lol:')"><img src="/templates/admin/images/smiles/lol.gif" alt="lol" width="20" height="20"></a>
<a href="javascript:addSmile('-_-')"><img src="/templates/admin/images/smiles/closedeyes.gif" alt="closedeyes" width="20" height="20"></a>
<a href="javascript:addSmile('(_(')"><img src="/templates/admin/images/smiles/glare.gif" alt="glare" width="20" height="20"></a>
<a href="javascript:addSmile(':huh:')"><img src="/templates/admin/images/smiles/huh.gif" alt="huh" width="20" height="20"></a>
<a href="javascript:addSmile(':(')"><img src="/templates/admin/images/smiles/sad.gif" alt="sad" width="20" height="20"></a>
<a href="javascript:addSmile(':angry:')"><img src="/templates/admin/images/smiles/angry.gif" alt="angry" width="20" height="20"></a>
<a href="javascript:addSmile('B)')"><img src="/templates/admin/images/smiles/cool.gif" alt="cool" width="20" height="20"></a>
<a href="javascript:addSmile(':unsure:')"><img src="/templates/admin/images/smiles/unsure.gif" alt="unsure" width="20" height="20"></a>
<a href="javascript:addSmile(':o')"><img src="/templates/admin/images/smiles/ohmy.gif" alt="ohmy" width="20" height="20"></a>
<a href="javascript:addSmile(':blink:')"><img src="/templates/admin/images/smiles/blink.gif" alt="blink" width="20" height="20"></a>
<a href="javascript:addSmile(':shok:')"><img src="/templates/admin/images/smiles/shok.gif" alt="shok" width="20" height="20"></a>
</div>
<div>
<input type="button" value=" B " onclick="addTag('b')">&nbsp;&nbsp;
<input type="button" value=" I " onclick="addTag('i')">&nbsp;&nbsp;
<input type="button" value=" U " onclick="addTag('u')">&nbsp;&nbsp;
<input type="button" value=" QUOTE " OnClick="addTag('quote')">&nbsp;&nbsp;
<input type="button" value=" CODE " OnClick="addTag('code')">&nbsp;&nbsp;
</div>
<textarea tabindex="2" id="message" name="bbcode" rows="8" style="width:100%">{$form.bbcode|escape}</textarea>
<label><input type="checkbox" name="tomail"{if $form.tomail=='Y'} checked{/if}>&nbsp;Получать уведомления о новых сообщениях.</label><br>
{if $usefiles}
<br>Прикрепленный файл:<br>
<input type="file" name="attach"><br>
{/if}
<br>
{submit caption="Предварительный просмотр"}
{button caption="Сохранить"  onclick="save(this.form)"}
{hidden name="action" value="preview"}
{hidden name="authcode" value=$system.authcode}
</form>
 
{/if}

Для всех шаблонов

$registerlink

Ссылка на страницу регистрации нового пользователя.

 
modules/forum/templates.txt · Последние изменения: 24.10.2010 19:50 От aristoc