Вложение одной переменной в качестве индекса в другую на уровне шаблона

Alkeeper

Новичок
Вложение одной переменной в качестве индекса в другую на уровне шаблона

собственно вот задачка:

по Гету передаются переменные, форма одна, а вот переменные каждый раз имеют разные имена.
Возникла такая необходимость - заполнять форму значениями введенными по предыдущему запросу на странице результата.

имеем такой код Smarty:

Код:
<form action="{$mainpath}" enctype="application/x-www-form-urlencoded" method="get">
{section name=f loop=$fields}
{if $fields[f].is_filter}
{if $fields[f].allow_vals}
<select name="{$fields[f].var_name}">
<option>Все...</option>
{section name=opt loop=$fields[f].allow_vals}
<option value="{$fields[f].allow_vals[opt]}"{if $smarty.get.$fields[f].var_name == $fields[f].allow_vals[opt]} selected{/if}>
{$fields[f].allow_vals[opt]}</option>
{/section}
</select>
{else}
<input name="{$fields[f].var_name}" type="text" value="{if $smarty.get.$fields[f].var_name}{$smarty.get.$fields[f].var_name}{/if}">
{/if}
{/if}
{/section}
.....
</form>
Проблема в правильной сборке вот этого:

value="{if $smarty.get.$fields[f].var_name}{$smarty.get.$fields[f].var_name}{/if}
или уж совсем узко вот этого:

$smarty.get.$fields[f].var_name

т.е. значения переменной GET пришедшей с индексом появляющемся в секции

Синтаксисом ПХП это было бы так:

$_GET[$fields[$f][var_name]]

или шире так $_GET[$fields[$f][var_name]][min] // или max

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

пробую так:

1. $smarty.get[$fields.f.var_name] // Ошибка синтаксиса смарти ($smarty.get[$fields.f.var_name] is an invalid reference)
2. $smarty.get.$fields[f].var_name // Ошибка скомпилированного ПХП файла (illegal offset)
3. $smarty.get.$fields.f.var_name // Сам понимаю, что нарушается всякая логика, ошибка из случая 2.
4. $smarty.get[$fields[f].var_name] // Ошибка Смарти (unidentified token '[$fields[f].var_name]')

Может кто-нить подсказать, как еще скобочки порасставлять?
Спасибо
 

netklon

Новичок
Попробуй предварительно назначать какой-то переменной значение имени GET-переменной.

{assign var="varname" value=$fields.f.var_name}
{$smarty.get.$varname}

Вообще же, учитывая, что у тебя предварительно работают два плагина, выцеплять значение поля из GET'а можно еще ими.
 

kvf77

Red Devil
netklon

ну че за бред несем - точно также это пишется как ив PHP
{$my_var[$my_another_var]}
{$my_var[$my_another_var].index}
 

netklon

Новичок
kvf77
А в каком месте бред?

{$smarty.get[$varname]} - не работает вообще-то.
 

kvf77

Red Devil
netklon

гм - народ как всегда мается хней - так никогда не надо делать. Сама реализация изначально неправильная.

готовь переменный в скрипте - а потом передавай в шаблон - нефиг лезть напрямую в суперглобальные массивы
 

Alkeeper

Новичок
Автор оригинала: kvf77
netklon

гм - народ как всегда мается хней - так никогда не надо делать. Сама реализация изначально неправильная.

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

Сейчас вар_нэйм один, потом другой... кроме имени еще и другие параметры передаются, например допустимые значения при выборке...

Короче решил все с помощью $smarty->register_function('bla','bla');
 

netklon

Новичок
kvf77
Оно и ясно что лезть в GET напрямую без фильтра нельзя. Только мы ведь не телепаты, может человек их где-то фильтрует.

Короче решил все с помощью $smarty->register_function('bla','bla');
А зачем вешать еще один плагин, если у тебя и так через два плагина пропускается $fields?
 

Alkeeper

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

из скрипта приходят переменные (в виде многомерного массива) для генерации формы.
форму эту нужно заполнить значениями пришедшими по гету

при доп.плагине всякие if...else возвращаются на уровень компилятора. Скорость не упала по сравнению с отсутствием заполнения формы...
 

kvf77

Red Devil
Alkeeper
помоему ты реализовал что-то ужасное и неправильное - то, что ты щас написал заставляет шевериться все волосы :)

лучше скажи че ты делаешь, мы тебе скажем как это надо делать
 

Alkeeper

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

-~{}~ 14.03.06 14:35:

вот ссылка на топик по другому вопросу из той же кухни

-~{}~ 14.03.06 14:35:

http://phpclub.ru/talk/showthread.php?s=&threadid=81206&rand=10
 

netklon

Новичок
Alkeeper

Не знаю, что там делает твой плагин bla, но я бы все сделал модификатором:
Код:
{foreach from=$fields item=f }
{$f|to_tag}
{/foreach}
И пускай этот модификатор решает какой тег подставить, и сам же подставляет данные из GET.
 
Сверху