>>почему нельзя эти ппеременные вводить в коде - обработчике
можно, но этот обработчик не всегда должен быть "сложным". ну вот пример. внутреннее представление итераций для контекста имеет такой же вид, в котором данные получаются из базы например - в этому большой бонус был ещё у php_templates. то есть вызов
$data =$dbh->getALL($sql,$params);
возвращает обычно что-то вроде
$data = array(
0=> array('id'=>1,'name'=> 'Вася'),
1=> array('id'=>2,'name'=> 'Петя'),
2 =>array('id'=>3,'name'=> 'Свето'),
)
и поэтому в обработчике можно не проходить по массиву данных а просто сказать
$View->context('/list/item');
$View->set($data);
тогда сразу же автоматом это будет одначать что контекст /list/item будет проитерирован ровно столько раз, сколько элементов в $data (три), а все переменные id и name автоматом будут видны в этой итерации (тут конечно не учитывается, что иногда нужны обработчики тот же htmlspecialchars, но это не всегда нужно, или можно использовать экранирование в самом шаблоне - короче, щас эту ситуацию не рассматриваем). это чем-то отдаленно напоминает подход XML/XSLT по-моему: то есть взяли внутреннее представление данных (массив $data - XML) и навернули на него шаблон (XSLT), только в данном случае пользуясь соглашениями о простом формате данных и шаблона всё получается куда более просто и быстро.
а теперь представим что нам нужен полосатый список. есть два варианта, и оба довольно неудобные для девелопера. первый - сделать разные контексты для того html-кода в котором прописывается стиль, второй - сделать if для того кода, где ставится стиль. но в обоих случаях уже нельзя обойтись одним лишь set - придется бежать по массиву $data в обработчике. а если будет предопределенная переменная $_is_even, то в шаблоне просто можно написать что-то вроде
style={{ if($_is_even, 'item_even', 'item_odd')}} и всё - set останется таким же.