Если переменная совпадает...

Petroffs

Новичок
Если переменная совпадает...

Проблема:

в файле *.tpl генерируется список типа
<option id=1>ла ла
<option id=2>ла ла
<option id=3>ла ла
<option id=4>ла ла
<option id=5>ла ла

как сделать в шаблоне при id=3
<option id=3 selected>ла ла?
 

alexhemp

Новичок
Это что у тебя - SMARTY?

тогда внутри foreach делаешь if

типа такого

<select ...>
{foreach ..}
<option id="{$item.ID}" {if $item.ID==$current_id}selected{/if}>
{/foreach}
</select>
 

Petroffs

Новичок
да, смарти!
всё понял, кажется ...

а $current_id как взять??
как из адр. строки в шаблоне - не знаю,
а пхп файле объявлять доп. переменную неохота...
 

alexhemp

Новичок
Petroffs

$current_id - это то самое значение, которое "совпадает".
И что значит - "НЕОХОТА".

Тебе нужно передать в шаблон переменную которой хранится идентификатор элемента, который нужно сделать selected.

А если ты хочешь использовать параметр из GET то лучше почитать документацию по Smarty.
http://smarty.php.net/manual/en/language.variables.smarty.php

Похоже тебе нужно что-то вроде $smarty.get.id
Изучай в общем мануал, на твои вопросы там есть исчерпывающие ответы.
 

Petroffs

Новичок
спасибо! :)

{$smarty.get.id} - вот то что я искал!! Ура:)

Неохота - потому предполагал что можно проще, меньшей кровью обойтись так сказать... Так и вышло...
Или {$smarty.get.id} есть нехорошо в данном случае?
 

Demiurg

Guest
не хорошо ... смарти не должен знать о переменных GET/POST.
 

Demiurg

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

alexhemp

Новичок
Это вопрос стиля программирования. В маленьких проектах с ограниченным бюджетом и сроками такое вполне допустими.

Если get.id используется ТОЛЬКО для установки дефолтного значения списка, то такое с ним обращение вполне допустими.

Ну будет он неверный, и что с того... Станет дефолтным первый элемент списка всего-лишь... а вот если эту форму запостить, ее уже нужно тщательно проверить
 

Demiurg

Guest
alexhemp
если ты считаешь, что маленькие проекты можно делать тяп-ляп, то ошибаешься. Я говорил как делать правильно, как делать тебе - решать тоже тебе.
 

Petroffs

Новичок
Если бы я делал тяп ляп, я бы сюда не писал бы... просто сделал бы и все...
Все равно, вам спасибо - просветили!
 

alexhemp

Новичок
Demiurg

Это каждому свое. Почему ты считаешь что это тяп-ляп? Если НУЖНО ТОЛЬКО УСТАНОВИТЬ ДЕФОЛТНОЕ ЗНАЧЕНИЕ СПИСКА, то никакого криминала в этом нет.

Это ДОГМА (как любит говорить Fanat) что нужно ВСЕ ЗНАЧЕНИЯ ОБЯЗАТЕЛЬНО ПРОВЕРЯТЬ. Если понимаешь что, как, где и зачем используется - то вполне допустимы такие конструкции (не везде, в строго ограниченных случаях, согласен).
И вопрос в этом КОНКРЕТНОМ случае - вкусовщина.
 

Demiurg

Guest
еще одна догма:
смарти не обрабатывает данные, он только делает из них html. Ленивые могут пользоваться
$smarty->assign('get' , $_GET);
 

Screjet

Новичок
Кажись в последней версии смарти заметил компоненты (в т.ч select), или это показалось?
 

alexhemp

Новичок
Demiurg

Это все вопрос терминологии... что считать данными и обработкой. HTML тоже данные. Всему свое место. В данном конкретном случае можно сделать просто и чуть сложнее (через PHP и assign). толку от этого будет - чуть. Если программист неопытный - я бы советовал все проверить и передать через Assign. Если опытный - перед записью в базу все проверит. Добавлять проверку данных, которые используются в {if} - излишне. Этот {if} - сам по себе скрытая проверка на допустимость.
 

Demiurg

Guest
alexhemp
html - это не данные. html - это представление данных. Но ты наверно считаешь это тоже вопросом терминологии ?
 

alexhemp

Новичок
Demiurg

Именно ;-) HTML тоже может быть данными. в том-же смарти чего через пре- и пост- фильтры можно обработать без проблем. Любая функция самрти именно ОБРАБАТЫВАЕТ данные.

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

И опять-же повторюсь - условности "что можно" и "что нельзя" сильно зависят от квалификации разработчика.
 

Demiurg

Guest
alexhemp
а теперь перечитай начальный вопрос и сделай выводы по поводу квалификации.
 
Сверху