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

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]')

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

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

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

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

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

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

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

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

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

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

Короче решил все с помощью $smarty->register_function('bla','bla');
 
kvf77
Оно и ясно что лезть в GET напрямую без фильтра нельзя. Только мы ведь не телепаты, может человек их где-то фильтрует.

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

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

при доп.плагине всякие if...else возвращаются на уровень компилятора. Скорость не упала по сравнению с отсутствием заполнения формы...
 
Alkeeper
помоему ты реализовал что-то ужасное и неправильное - то, что ты щас написал заставляет шевериться все волосы :-)

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

-~{}~ 14.03.06 14:35:

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

-~{}~ 14.03.06 14:35:

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

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

И пускай этот модификатор решает какой тег подставить, и сам же подставляет данные из GET.
 
Сверху