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

Главная страница ([раздел]_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 · Последние изменения: 14.02.2018 12:16 (внешнее изменение)