Конструкция является правильной, применяется повсеместно. Главное - разделять логику обработки данных и логику их вывода. Грубо говоря, страница сайта должна обслуживаться двумя файлами - тем, который готовит данные (контроллер), и тем, который их выводит (шаблон). В первом не должно быть ни малейшего упоминания об HTML, а во втором - никакой работы с базой. В том, который выводит, вполне может использоваться специфичная для вывода логика.
Например:
У нас есть страница новостей. Контроллер готовит массив с данными и передает в шаблон. Чтобы вывести этот массив в шаблоне, нам нужен ЦИКЛ. Цикл - это логика. Но без нее здесь не обойтись. И ничего страшного в ней нет, поскольку это логика отображения.
Если новостей нет - желательно вывести сообщение об этом, чтобы не вывдить пустую страницу. То есть, мы должны проверить массив на пустоту, и вывести сообщение. Это тоже логика, которую невозможно прописать нигде, кроме шаблона.
А вот чего в шаблоне не должно быть - это обработки данных, работы с БД.
Пока соблюдаются эти правила, твое приложение будет переносимым и настраиваемым. А на каком языке написан шаблон - PHP, Смарти или Вольт - это уже дело десятое.
Подробнее можно почитать здесь
phpfaq.ru/tpl