Получение значения перемнной из многомерного массива

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Получение значения перемнной из многомерного массива

Доброго времени суток.
Вывожу в цикле элементы массива
Делаю это таким образом:
PHP:
{foreach from=$rub item=_r}
  {capture name = test}{$podrub_names[$_r][1]}{/capture}
  {$root_rub[$smarty.capture.test]}
{/foreach}
Хочется сделать более компактно без вызова лишних функций (надеюсь я не на спичках собираюсь экономить :).

Хочу обойтись без capture.
{$root_rub[$podrub_names[$_r][1]]}
Сматри возвращает ошибку
Smarty error: [in test.tpl line 19]: syntax error: unrecognized tag: $root_rub[$podrub_names[$_r][1]] (Smarty_Compiler.class.php, line 436)
Что не так?
 

kost

Новичок
Пожалуй, кроме capture есть один вариант. assign. Или делайте всю нужную Вам "грязную" работу в php.

Может я тут и не прав, но если смарти научить парсить любой сложности код, то Smarty будет очень тупить и переименуется в Stuppy.
 

pereverzev

Новичок
если так сильно надо это делать в смарти, то модно написать функцию которая будет дописывать чтото в массив и зарегестрировать ее в смарти
в доках по смарти есть описание, капай в сторону register_function

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

kost

Новичок
pereverzev
> в шаблоне никаких переменных создваться не должно

А вот тут я не согласен. Если переменная должна будет содержать какой-нибудь html-код, то без присваивания практически не обойтись. Ведь иначе придется либо еще один шаблон создавать (!), либо в php'шке html ставить, чего делать не надо впринципе. Для того смарти и сделан чтоб полностью отделить html от php.

Но вот в данном случае никакого html нету. Посему лучшим способом есть (скорее всего) обработка в php.
 

alexhemp

Новичок
Я бы использовал синтаксис {capture assign="VAR"} вместо того что есть.

Тогда {capture} перестанут смущать потому что тогда результат можно вывести коротко {$VAR}

;-)

типа
Код:
{foreach from=$rub item=_r} 
  {capture assign="index"}{$podrub_names[$_r][1]}{/capture} 
  {$root_rub[$index]} 
{/foreach}
Можно еще попробовать просто написать
{$root_rub.$podrub_names.$r.1} :)

Вариантов масса - экспериментируйте
http://smarty.php.net/manual/ru/language.syntax.variables.php
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ребята!
Спасибо! :)
 

alexhemp

Новичок
Mr_Max

Я бы рекомендовал прочесть целиком документацию по смарти. Это всего пол-часа.
 
Сверху