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

Altex

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

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

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

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

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

Спасибо.
 

Demiurg

Guest
можно все тексты ошибок положить в конфиг и брать их от туда по идентификатору.
 

nw

Новичок
Интересная ситуация. А почему не подходит вариант передачи в шаблон массива с содержанием id и текста ошибки? В чем преимущество описания текстов ошибок прямо в шаблоне (хотя бы в данном конкретном случае)?
 

Altex

Новичок
Автор оригинала: 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 и текста ошибки? В чем преимущество описания текстов ошибок прямо в шаблоне (хотя бы в данном конкретном случае)?
да так и передавал :)
 

Demiurg

Guest
Усложнения особого я не вижу, вижу более правильный подход.
 

Altex

Новичок
Спасибо, я понимаю где правильный подход. Мне лишь не нравится симантика (если я правильно понимаю это слово).

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

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

Я буду тебе признателен, если поможешь записать в одну строчку, если это возможно конечно.
 

Demiurg

Guest
>Я буду тебе признателен, если поможешь записать в одну строчку, если это возможно конечно.
если подробно опишешь, что в конфиге, какие данные приходят и что надо получить, то постараюсь.
 

Altex

Новичок
Я сейчас вот так делаю:
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}
Спасибо.
 

Demiurg

Guest
А почему у $form_error структура такая странная ? Что она означает ?
 

Altex

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

Заполняется этот массив просто для каждого неправильно введённого поля:
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>
 

Demiurg

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

Altex

Новичок
Автор оригинала: Demiurg
>Заполняется этот массив просто для каждого неправильно введённого поля:
>$form_error[] = array('Название поля, например ИМЯ','идентификатор ошибки');
если так, то структура у него должна быть отличная от описаной выше.
Что навело тебя на такие мысли? :)
Я что-то не могу найти ошибку..

-~{}~ 24.11.04 17:18:

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