SMARTY: Как в шаблоне создать массив?

  • Автор темы Автор темы Altex
  • Дата начала Дата начала

Altex

Новичок
SMARTY: Как в шаблоне создать массив?

Предчувствую вопрос: "зачем?".

Много раз было нужно, последний раз для того чтобы создать ассоциативный массив ошибок, и передавать через php ($smarty->assign) только идентификатор ошибки, а текст соответственно будет браться из этого массива.

Понимаю что есть вариант такой:
{if $error == 'ID_ERROR1'}
{elseif $error == 'ID_ERROR2'}
{elseif $error == 'ID_ERROR3'}
...
{elseif $error == 'ID_ERROR#'}
{/if}

но интересуют альтернативы.

Спасибо.
 
можно все тексты ошибок положить в конфиг и брать их от туда по идентификатору.
 
Интересная ситуация. А почему не подходит вариант передачи в шаблон массива с содержанием id и текста ошибки? В чем преимущество описания текстов ошибок прямо в шаблоне (хотя бы в данном конкретном случае)?
 
Автор оригинала: Demiurg
можно все тексты ошибок положить в конфиг и брать их от туда по идентификатору.
Спасибо, но это только всё усложнило :(

PHP:
{if $form_error}<b>
Input fields contain errors:
<dl>
{* Loading $errors *}
{config_load file="$template_dir/regform_errors.conf"}
{assign var="errors" value=$smarty.config}

{section loop=$form_error name=error}
{* Error identificator - $err *}
{assign var="err" value=$form_error[error][1]}

<dd>{$form_error[error][0]|string_format:$errors.$err}</dd>
{/section}
</b></dl>{/if}

было вот так

PHP:
{if $form_error}<b>
Input fields contain errors:
<dl>
{* Loading $errors *}
{include_php file="$template_dir/regform_errors.tpl"}
{section loop=$form_error name=error}
{* Error identificator - $err *}
{assign var="err" value=$form_error[error][1]}

<dd>{$form_error[error][0]|string_format:$errors.$err}</dd>
{/section}
</b></dl>{/if}

-~{}~ 22.11.04 17:17:

Автор оригинала: nw
Интересная ситуация. А почему не подходит вариант передачи в шаблон массива с содержанием id и текста ошибки? В чем преимущество описания текстов ошибок прямо в шаблоне (хотя бы в данном конкретном случае)?
да так и передавал :)
 
Усложнения особого я не вижу, вижу более правильный подход.
 
Спасибо, я понимаю где правильный подход. Мне лишь не нравится симантика (если я правильно понимаю это слово).

Что бы вот эту строчку вывести
{$form_error[error][0]|string_format:$errors.$err}

мне приходится ещё вот эти две вставлять
{assign var="errors" value=$smarty.config}
{assign var="err" value=$form_error[error][1]}

Я буду тебе признателен, если поможешь записать в одну строчку, если это возможно конечно.
 
>Я буду тебе признателен, если поможешь записать в одну строчку, если это возможно конечно.
если подробно опишешь, что в конфиге, какие данные приходят и что надо получить, то постараюсь.
 
Я сейчас вот так делаю:
PHP:
============ CONFIG. ========
[ERRORS]
ER_REQUIRED      = '"%s" is required'
ER_TEXTSHORT     = '"%s" is too short'
ER_TEXTLONG      = '"%s" is too long'
ER_EMAILNOTVALID = '"%s" must be a valid email address'
ER_CONFIRMDIF    = 'Confirmation field "%s" is not valid'
ER_USERREGISTERED= 'Your username already taken. Please try another username.'

PHP:
============ SMARTY. ==========
{if $form_error}<b>
Input fields contain errors:
<dl>
{* Loading $errors *}
{config_load file="$template_dir/regform_errors.conf"}
{assign var="errors" value=$smarty.config}
Пример того, что может быть в:

Код:
$form_error = array(
    'field_name_1', 'ER_REQUIRED',
    'Last name', 'ER_REQUIRED',
    'E-mail', 'ER_EMAILNOTVALID'
);

Поэтому дальше:
PHP:
{section loop=$form_error name=error}
{* Error identificator - $err *}
{assign var="err" value=$form_error[error][1]}

<dd>{$form_error[error][0]|string_format:$errors.$err}</dd>
{/section}
</b></dl>{/if}

Спасибо.
 
А почему у $form_error структура такая странная ? Что она означает ?
 
Это массив с полями, в которых пользователь, при заполнении формы, допустил ошибки или не заполнял необходимые поля.

Заполняется этот массив просто для каждого неправильно введённого поля:
PHP:
$form_error[] = array('Название поля, например ИМЯ','идентификатор ошибки');

-~{}~ 23.11.04 20:16:

Предполагается, что есть форма с полями, возле каждого из которых стоит лэйбл с названием этого поля,

PHP:
"Your password": <input name='pass' value='' type='password'>

и идентификаторы с ошибками записаны в конфиге, который подключается в шаблоне smarty.

PHP:
[ERRORS]
ER_REQUIRED      = '"%s" is required'
...

Когда пользователь например не ввёл пароль и оставил поле пустым то в шпблон передаётся обрабатывающей всё это дело функцией массив, например:
PHP:
$form_error[] = array('Your password','ER_REQUIRED');

И шаблон генерирует текст на страниче
PHP:
Input fields contain errors:
<dl>
<dd>"Your password" is required</dd>
</dl>
 
>Заполняется этот массив просто для каждого неправильно введённого поля:
>$form_error[] = array('Название поля, например ИМЯ','идентификатор ошибки');
если так, то структура у него должна быть отличная от описаной выше.
 
Автор оригинала: Demiurg
>Заполняется этот массив просто для каждого неправильно введённого поля:
>$form_error[] = array('Название поля, например ИМЯ','идентификатор ошибки');
если так, то структура у него должна быть отличная от описаной выше.
Что навело тебя на такие мысли? :)
Я что-то не могу найти ошибку..

-~{}~ 24.11.04 17:18:

Во всяком случае у меня всё работает именно так. И именно работает :) Может опечатка где?
 
Сверху