RomikChef:
Макс, Сергей, вы не хотите высказаться? Жалко...
Ну что вам написать ?
Я довольно долго использовал и шаблонизатор и чистый ПХП, сейчас изучаю XSLT.
ИМХО, 
все 3 способа вполне примелемы и отличаются лишь мелочами, которые для кого-то
имеет значение, а для кого-то нет.
Например, я считаю, что в шаблоне должны быть доступны только те данные, 
которые разрешил программист (это мое требование, которое никому не навязываю).
То есть если есть шаблон
<!-- some template -->
<b><?=$name;?></b>
то в нем не должны быть доступны переменным типа $db_login (логин доступа к БД).
В ПХП отделить пространство имен можно лишь двумя способами : помещение кода в  функцию или класс (обычный include не подойдет). 
Далее, мне при отладке удобно, что в шаблоне нет ПХП-кода. 
Любые ПХП-ошибки (warning-и, notice-ы) надо искать именно в коде, а не в шаблоне.
Когда используешь шаблонизаторы, то любые ПХП-ошибки в броузер аккуратно выводятся сверху, а потом идет ХТМЛ-код (дизайн). 
Но и классически шаблонизаторы меня не устраивают.
Причина,  код скрипта кишит всякими :
      $tpl->addBlockFile(\'content\', \'cb\', \'tth_list.html\');
      if ($amount) {
         $tpl->setCurrentBlock(\'row\');
         while($list->isValid()) {
            $thread= & $list->get();
            $tpl->setVariable(array(
               \'thread_id\' => $thread->id, 
               \'message\' => $thread->getMessage(), 
               \'subject\' => $thread->getSubject(), 
            ));
            $tpl->parseCurrentBlock();
            $list->next();
         }
      } else {
         $tpl->touchBlock(\'no_row\');
      }
$tpl - это объект шаблонизатора.
Очень часто, если убрать всю работу с шаблонами, то скрипты оказываются очень 
похожими, почти идентичными (это к вопросу о повторном использовании кода).
Поэтому я склоняюсь к использовнию шаблонизаторов, у которых шаблон имеет логику.
Выбор тут невелик - Smarty/XSLT/чистый PHP (Я склоняюсь к XSLT)
Противники таких шаблонов говорят что в шаблоне не должно быть никакой логики, 
что они должны быть как можно более простыми.
1. Начнем с логики.
Логику в приложении можно разделить на 2 части: бизнес-логика (логика обработки данных) и логика представления (логика дизайна).
Так вот, верстальщик ДОЛЖЕН знать о логике представления. И он должен уметь управлять логикой представления.
Все что касается внешнего представления можно доверить верстальщику.
2. По поводу простоты шаблона.
Верстальщик должен быть таким же профи как и программист, только профи в своей области, в верстке.
Иначе пусть ищет другую работу. 
Свое мнение не навязываю и не обсуждаю, хотя если есть вопросы - отвечу.