Вообше смарти предназначен чтобы отделить код от верстки.
если у вас этот код не относится к верстке то лучше бы его делать в файле php чем в шаблоне tpl
Есть тысяча случаев, когда вставить php в шаблон намного проще и правильней, чем заводить под него отдельный объект, методы, отдельную переменную в Smarty->assign и т.д. Начиная от банального echo microtime(1), который нужен именно
сейчас, а не там, давно - и заканчивая кодами партнерских программ, которые "надо вставлять перед </body>" и "запрещается модифицировать".
Я сначала тоже подумал, что оператор {php} в Смарти - это какой-то кромешный бред. Но на самом деле не зря он там. Запросы трудящихся пересилили фанатизм академиков, знающих и умеющих
правильно проектировать приложения. Все-таки реальная жизнь иногда от сферического коня отличается, и хорошо что создатели Smarty это понимают и идут навстречу.
Хотя "по хорошему" ты, конечно же, совершенно прав. Нельзя код хранить в верстке. Нельзя.