предопределенные массивы в шаблонах smarty

lingod

Новичок
предопределенные массивы в шаблонах smarty

добрый вечер

задача такая

есть сущности с неким атрибутом, который принимает значение из множества
например, статус пользователя может быть 1, 2 или 3
1 - на модерации
2 - активный
3 - заблокированый

т.е. значению соответствует лексема
массив лексем я хочу вынести в шаблон. на пример в массив userstatus
чтоб потом просто выводить {$userstatus[$curr_user.status]}


надеюсь понятно объяснил


но
в конфигурационных файлах smarty массивы задавать нельзя
{assign} тоже

как же мне тогда ввести этот массив средствами smarty а не из php кода?
 

Alexandre

PHPПенсионер
используй не массив а значение переменных:
$status0
$status1
$status2
...
 

zerkms

TDD infected
Команда форума
Alexandre
у человека текущий индекс хранится в $curr_user.status
как ему, имея это значение, получить то, что в "массиве" статусов? :))

lingod
почему нельзя использовать {assign} ?
 

AmdY

Пью пиво
Команда форума
assign в шаблонах не работает с массивами, но это можно изменить ;)
другое дело, что заасайнить переменную-массив нужно не в шаблоне, а где-то в контроллере или в конструкторе Smarty
 

zerkms

TDD infected
Команда форума
AmdY
если не ошибаюсь, то может прокатить {assign var=foobar value="1|2|3"|@explode:"|"}
;-)
 

Heresy

Новичок
Напиши свою смарти-функцию для этого.
Или модификатор...

типа,
{"variable_name"|create_array:"value1":"value2":"value2"}

:)
 

lingod

Новичок
Автор оригинала: AmdY
assign в шаблонах не работает с массивами, но это можно изменить ;)
другое дело, что заасайнить переменную-массив нужно не в шаблоне, а где-то в контроллере или в конструкторе Smarty
не очень хорошее решение, так как возникает завязка на код

хотелось бы чтобы все что связано с отображением данных их БД было целиком в шаблоне

-~{}~ 05.03.09 23:51:

Автор оригинала: Heresy
Напиши свою смарти-функцию для этого.
Или модификатор...

типа,
{"variable_name"|create_array:"value1":"value2":"value2"}

:)
спасибо
а где об этом можно подробнее прочитать или пример? прочел ман, но не могу сообразить как построить ассоциативный массив?

-~{}~ 05.03.09 23:56:

Автор оригинала: Alexandre
используй не массив а значение переменных:
$status0
$status1
$status2
...
а как взять перменную по значению? т.е. как сгенерировать обращение к переменной $('status'+$n)
 

AmdY

Пью пиво
Команда форума
function.assign_array.php
{assign_array var="foo" values="var1, var2, var3" delimiter=", "}
PHP:
function smarty_function_assign_array($params, &$smarty)
{
    $smarty->assign($params['var'], explode($params['delimiter'],$params['values']) );
}
но я уверен что ты зря это затеял

-~{}~ 06.03.09 00:38:

или в твоём случае
{assign_array var="foo" val1=$var1 val2=$var2 val3=var3}
PHP:
function smarty_function_assign_array($params, &$smarty) 
{ 
$var = $params['var'];
unset($params['var']);    
$smarty->assign($var, $params); 
}
только проверки не забудь
 

Heresy

Новичок
PHP:
function smarty_modifier_create_array () {
global $smarty; // зависит от кода, конечно
$args = func_get_args();
$array_name = array_shift($args);
$smarty->assign($array_name, $args);
}
$smarty->register_modifier('create_array', 'smarty_modifier_create_array');
:)
 

zerkms

TDD infected
Команда форума
Heresy
с функцией вариант получился более стройный.
 

Heresy

Новичок
{assign_array var="foo" val1=$var1 val2=$var2 val3=var3}
vs.
{"foo"|create_array:$var1:$var2:$var3}

Дело вкуса :)
 

Heresy

Новичок
А было такое условие?
В примере AmdY массив будет ассоциативным.
val1 =>$var1
val2 => $var2
..
и т.д.
 
Сверху