Модуль "Пользователи": данные доступные в шаблонах

Cтраница авторизации ([раздел]_main.tpl)

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

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

<h1>Авторизация</h1>
 
{if !$auth->isLogin()} {* Если пользователь не авторизирован. *}
    <form name="loginform" method="post">
        <table>
            <tr>
                <td width="80">Логин:</td>
                <td><input type="text" name="login" size="15" maxlength="20"></td>
            </tr>
            <tr>
                <td width="80">Пароль:</td>
                <td><input type="password" name="password" size="15"  maxlength="20"></td>
            </tr>
        </table>
        <br>
        <input type="checkbox" name="auto" checked>Входить автоматически<br>
        {submit caption="Войти"}<br>
        <li><a href="{$system.sectionlink}remember.html">Забыли пароль?</a></li>
        <li><a href="{$system.sectionlink}register.html">Регистрация</a></li>
        {hidden name="action" value="login"}
    </form>
 
{else} {* Если авторизирован, то приветствие и меню личного кабинета. *}
 
    <form name="logoutform" method="post">
        Добро пожаловать, {$auth.data.name}<br>
        <li><a href="{$system.sectionlink}anketa.html">Личные данные</a></li>
        {if $options.usebalance}
            <li><a href="{$system.sectionlink}balance.html">Личный счет</a></li>
        {/if}
        <br>
        {submit caption="Выйти"}
        {hidden name="action" value="logout"}
    </form>
{/if}

Cтраница регистрации ([раздел]_register.tpl)

Этот тип шаблона используется для страницы регистрации пользователя. Есть набор обязательных полей, а так же набор дополнительных анкетных данных, которые настраиваются в соответствующем редакторе. Поля для ввода дополнительных полей можно формировать путем обхода специального массива, либо непосредственно в шаблоне.

$fields

Ассоциированный массив записей с данными о дополнительном наборе полей у формы. Ключом каждой записи является идентификатор поля, а сами записи представляют собой массив с ключами:

  • field - строковой идентификатор поля (он же является ключом для всей записи).
  • name - описание поля.
  • type - тип поля, принимает одно из значений, доступных в редакторе полей.
  • property - сопутствующее свойство для типа поля, например допустимое количество символов для типа string.
  • value - начальное значение для элемента ввода в форме.
  • fill - значение свойства «Обязательно для заполнения», принимает значения Y/N.

$form

Массив данных для начальных значений формы (аналог value в записях $fields). По сути является копией $_POST, поэтому при выводе важно защищать значения с помощью escape.

$captcha

Содержит значение, которое может быть использовано в скрытом поле captcha, если форму регистрации необходимо сделать без ввода контрольных цифр на рисунке.

$errors.captcha

Принимает значение истина, если пользователь ошибся при вводе контрольных цифр на рисунке.

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

<h1>Регистрация</h1>
 
{* Возможные ошибки при регистрации. *}
{if $errors.captcha}
    <div class="box"><font color="red">Неверно введены контрольные цифры, попробуйте еще раз.</font></div>
{/if}
{if $errors.emptyemail}
    <div class="box"><font color="red">Не указан email.</font></div>
{/if}
{if $errors.doublelogin}
    <div class="box"><font color="red">Пользователь с таким логином уже существует, попробуйте другой.</font></div>
{/if}
 
{* Скрипт валидации формы. *}
{literal}
<script type="text/javascript">
    function valid_form(form)
    { if(form.name.value.replace(/\s+/, '').length==0)
      { alert("Пожалуйста, заполните имя."); return false; }
      if(!/^[a-zA-Z0-9_\-@.]+$/i.test(form.login.value))
      { alert("Пожалуйста, корректно заполните логин."); return false; }
      if(form.login.value.length<3)
      { alert("Пожалуйста, укажите логин не короче 3х символов."); return false; }
      if(form.password.value.replace(/\s+/, '').length==0)
      { alert("Пожалуйста, заполните пароль."); return false; }
      if(form.password.value!=form.password2.value)
      { alert("Пожалуйста, повторите ввод пароля."); return false; }
      if(form.email.value.replace(/\s+/, '').length == 0 )
      { alert("Пожалуйста, укажите email"); return false; }
      if(/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/i.test(form.email.value) || !/^\S+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/i.test(form.email.value))
      { alert("Пожалуйста, правильно заполните email"); return false; }{/literal}
      {foreach from=$fields item=field}
      {if $field.fill=="Y" && $field.type!="bool" && $field.type!="select"}
      if(form.{$field.field}.value.replace(/\s+/, '').length==0)
      {literal}{{/literal} alert("Пожалуйста, заполните поле '{$field.name}'"); return false;{literal}}{/literal}
      {/if}
      {/foreach}
      {literal}
      if(form.captcha.value.replace(/\s+/, '').length<4)
      { alert('Пожалуйста, укажите код на картинке.'); return false; }
      return true;
    }
</script>
{/literal}
 
<form method="post" onsubmit="return valid_form(this)" enctype="multipart/form-data">
    Ваше имя:<b>*</b><br>
    {editbox name="name" max=50 width="50%" text=$form.name}<br>
    Логин:<b>*</b><br>
    {editbox name="login" max=20 width="20%" text=$form.login}<br>
    Пароль:<b>*</b><br>
    <input name="password" type="password" value="{$form.password|escape}"  maxlength="50" style="width:20%"><br>
    Пароль еще раз:<b>*</b><br>
    <input name="password2" type="password" value="{$form.password2|escape}" maxlength="50" style="width:20%"><br>
    Ваш e-mail:<b>*</b><br>
    {editbox name="email" max=50 width="20%" text=$form.email}<br>
    {if $options.useavatara}
 
    Аватара:<br>
    <input type="file" name="image"><br>
    {/if}
 
    {foreach from=$fields item=field}
 
        {if $field.type=="string"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {editbox name=$field.field max=$field.length text=$field.value width="40%"}<br>
 
        {elseif $field.type=="int" || $field.type=="float"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {editbox name=$field.field max=10 width=60 text=$field.value}<br>
 
        {elseif $field.type=="bool"}
            <br><input type="checkbox" name="{$field.field}"{if $field.value=='Y'} checked{/if}>&nbsp;{$field.name}<br>
 
        {elseif $field.type=="text"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {textarea name=$field.field rows=$field.property text=$field.value}<br>
 
        {elseif $field.type=="select"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            <select name="{$field.field}">
                {if $field.fill=="N"}<option value="0">Не выбрано</option>{/if}
                {html_options options=$field.options selected=$field.value}
            </select><br>
 
        {elseif $field.type=="file" || $field.type=="image"}
            {$field.name}:<br>
            <input type="file" name="{$field.field}"><br>
 
        {/if}
    {/foreach}
    <br>
 
    {captcha style="float:right"}
    Введите код на рисунке:
    {editbox name="captcha" max=4 width="50"}<br>
    <br>
    {submit caption="Регистрация"}
    {hidden name="action" value="register"}
</form>

Страница изменения личных данных ([раздел]_anketa.tpl)

Этот тип шаблона используется для страницы личных данных пользователя, которые он может изменить. Есть набор обязательных полей, а так же набор дополнительных анкетных данных, которые настраиваются в соответствующем редакторе. Поля для ввода дополнительных полей можно формировать путем обхода специального массива, либо непосредственно в шаблоне.

$fields

Ассоциированный массив записей с данными о дополнительном наборе полей у формы. Формат аналогичен описанному выше.

$form

Массив данных для начальных значений формы (аналог value в записях $fields).

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

<h1>Личные данные</h1>
 
{* Скрипт валидации формы. *}
{literal}
<script type="text/javascript">
    function valid_form(form)
    { if(form.name.value.replace(/\s+/, '').length==0)
      { alert("Пожалуйста, заполните имя."); return false; }
      if(form.email.value.replace(/\s+/, '').length == 0 )
      { alert("Пожалуйста, укажите e-mail"); return false; }
      if(/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/i.test(form.email.value) || !/^\S+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/i.test(form.email.value))
      { alert("Пожалуйста, правильно заполните e-mail"); return false; }{/literal}
      {foreach from=$fields item=field}
          {if $field.fill=="Y" && $field.type!="bool" && $field.type!="select"}
          if(form.{$field.field}.value.replace(/\s+/, '').length==0)
          {literal}{{/literal} alert("Пожалуйста, заполните поле '{$field.name}'"); return false;{literal}}{/literal}
          {/if}
      {/foreach}
    {literal}
      return true;
    }
</script>
{/literal}
 
<form method="post" onsubmit="return valid_form(this)" enctype="multipart/form-data">
    Ваше имя:<b>*</b><br>
    {editbox name="name" max=50 width="50%" text=$form.name}<br>
    Ваш логин: <b>{$form.login}</b><br>
    Пароль (если хотите сменить):<br>
    <input name="password" type="password" maxlength="50" style="width:20%"><br>
    Пароль еще раз:<br>
    <input name="password2" type="password" maxlength="50" style="width:20%"><br>
    Ваш e-mail:<b>*</b><br>
    {editbox name="email" max=50 width="20%" text=$form.email}<br>
 
    {if $options.useavatara}
        Автара:<br>
        {if $form.idimg>0}{image id=$form.idimg}<br>Заменить:<br>{/if}
        <input type="file" name="image" style="width:40%"><br>
    {/if}
 
    {foreach from=$fields item=field}
 
        {if $field.type=="string"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {editbox name=$field.field max=$field.length text=$field.value width="40%"}<br>
 
        {elseif $field.type=="int" || $field.type=="float"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {editbox name=$field.field max=10 width=60 text=$field.value}<br>
 
        {elseif $field.type=="bool"}
            <br><input type="checkbox" name="{$field.field}"{if $field.value=="Y"} checked{/if}>&nbsp;{$field.name}<br>
 
        {elseif $field.type=="text"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            {textarea name=$field.field rows=$field.property text=$field.value}<br>
 
        {elseif $field.type=="select"}
            {$field.name}:{if $field.fill=="Y"}<b>*</b>{/if}<br>
            <select name="{$field.field}">
                {if $field.fill=="N"}<option value="0">Не выбрано</option>{/if}
                {html_options options=$field.options selected=$field.value}
            </select><br>
 
        {elseif $field.type=="image"}
            {$field.name}:<br>
            {if $field.value>0}
                {image id=$field.value height=80 popup=true}<br>
                <input type="checkbox" name="{$field.field}_del">Удалить<br>
                Заменить:<br>
            {/if}
            <input type="file" name="{$field.field}"><br>
 
        {elseif $field.type=="file"}
            {$field.name}:<br>
            {if $field.value>0}
                {download id=$field.value}<br>
                <input type="checkbox" name="{$field.field}_del">Удалить<br>
                Заменить:<br>
            {/if}
            <input type="file" name="{$field.field}"><br>
 
        {/if}
    {/foreach}
 
    <br>
    {submit caption="Сохранить"}
    {hidden name="action" value="save"}
</form>

Страница логов операций с личным счетом ([раздел]_balance.tpl)

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

$user

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

name

Полное имя пользователя.

login

Полное имя пользователя.

email

Email пользователя.

date

Дата и время регистрации в формате UTC.

dauth

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

cauth

Количество визитов.

group

Название группы к которой принадлежит пользователь, если используется плагин "Группы пользователей".

idimg

Числовой идентификатор изображения (лого/аватар).

balance

Текущий баланс пользователя.

Дополнительное поле

Значение дополнительного анкетного поля.

$valute

Наименование валюты, в которой ведется счет.

$in

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

date

Дата совершения операции в формате UTC.

sum

Сумма операции.

description

Описание операции.

$in_pager

Объект постраничной навигации для приходных операций.

$sumin

Сумма всех приходных операций.

$out

Массив записей с данными о расходных операциях. Формат записей аналогичен приходным операциям.

$out_pager

Объект постраничной навигации для расходных операций.

$sumout

Сумма всех расходных операций.

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

<h1>Личный счет.</h1>
 
<p>Текущий баланс: {$user.balance} {$valute}</p>
 
<h3>Приходные операции:</h3>
{if $in}
    <table border="1">
        <tr>
            <th>Дата</th>
            <th>Описание</th>
            <th>Сумма</th>
        </tr>
        {section name=i loop=$in}
            <tr>
                <td>{$in[i].date|date_format:"%d.%m.%Y %T"}</td>
                <td>{$in[i].description}</td>
                <td>{$in[i].sum}</td>
            </tr>
        {/section}
    </table>
    {object obj=$in_pager}
    <p>Всего: {$sumin} {$valute}</p>
{else}
    <p>Нет</p>
{/if}
 
<h3>Расходные операции:</h3>
{if $out}
    <table border="1">
        <tr>
            <th>Дата</th>
            <th>Описание</th>
            <th>Сумма</th>
        </tr>
        {section name=i loop=$out}
            <tr>
                <td>{$out[i].date|date_format:"%d.%m.%Y %T"}</td>
                <td>{$out[i].description}</td>
                <td>{$out[i].sum}</td>
            </tr>
        {/section}
    </table>
    {object obj=$out_pager}
    <p>Всего: {$sumout} {$valute}</p>
{else}
    <p>Нет</p>
{/if}

Страница восстановления пароля ([раздел]_remember.tpl)

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

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

<h1>Восстановление пароля</h1>
 
{if $errors.remember}
    <p><font color="red">Указанный логин/email отсутствует в нашей базе. Попробуйте еще раз.</font></p>
{/if}
 
<form  method="post">
    Логин или email:<br>
    {editbox name="login"}
    {submit caption="Восстановить"}
    {hidden name="action" value="remember"}
</form>

Страница сообщения ([раздел]_message.tpl)

Этот тип шаблона используется для вывода сообщений после основных операций.

$message

Идентификатор определяющий тип сообщения, может принимать значения:

  • register_ok - Успешное завершение регистрации в режиме автоактивации аккаунта.
  • register_activate - Успешное завершение регистрации и приглашение активировать аккаунт по ссылке в письме.
  • register_wait - Успешное завершение регистрации и предложение ожидать активации аккаунта администратором.
  • activate_ok - Успешная активация по ссылке в письме.
  • activate_error - Неудачная активация по ссылке в письме.
  • remember_ok - Успешное восстановление пароля.

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

<h1>Сообщение</h1>
 
{if $message=="register_ok"}
    <p>Регистрация прошла успешно!</p>
{elseif $message=="register_activate"}
    <p>Регистрация прошла успешно. Вам отправлено письмо со ссылкой для активации аккаунта.</p>
{elseif $message=="register_wait"}
    <p>Регистрация прошла успешно. В ближайшее время администратор активирует ваш аккаунт.</p>
{elseif $message=="activate_ok"}
    <p>Активация прошла успешно!</p>
{elseif $message=="activate_error"}
    <p>Ошибка активации!</p>
{elseif $message=="remember_ok"}
    <p>Ваш новый пароль выслан на e-mail.</p>
{/if}

Страница пользователя ([раздел]_page.tpl)

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

$user

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

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

<h1>{$user.name}</h1>
 
{if $options.useavatara}
    {image id=$user.idimg}
{/if}
 
modules/users/templates.txt · Последние изменения: 14.02.2018 11:31 (внешнее изменение)