RomikChef имхо, ты не прав на счет удобства шаблолнов, вот маленький простенький примерчик шаблона древовидного меню сайта без js, ничего лишнего кроме html и маркеров в шаблоне
который существенно помогает(упрощает) в работе как вертальщику так и программеру
суть:
из разных частей php кода при определенных условиях успользуется html фрагменты из шаблона для сбоки нужного html
простейшими методами класса 
- позволяет переключать шаблоны (хоть 100 различныйх отображений дерева, не требуется писать 100 пхпшных версий, и пытаться упростить вывод html кода различными способами типа $html .= <<
 -не нарушается целостность работы пхпшника, если верстальщик запорл шаблон пофиг есть шаблон по-умолчанию, остальные 10 человек делают свои шаблоны одновременно с тобой(только ты правишь пхп)
-пхпшник один(как модуль, меню, выпадающее меню, древрвидное меню... новости форум)
-шаблон понимает любой редактор html, если ручкми впадлу..
-маленький объем..
и даже если на пхп сделать аналог, т.е. вынести хтмл во внешний подключаеммый массив, не получишь такого результата, т.к. например не сможешь так просто    включить файл FILE "forms.htm"} т.е. придется писать функцию проверки сущестования и чтения файла как минимум и внедрения в массив, что и является частью шаблонизатора... который может брать массив откуда угодно из файла, БД, просто редактировать html удобнее в файле а не в базе или php массиве... 
кусок php кода, как вариант
...
               $t->assign(\'DATA\',$ar);
                if ($i<$num-1) {
                     if ($ar[\'haschild\']==1) 
                      $t->parse(treemenu.items.child_node\');
                    else $t->parse(treemenu.items.nochild_node\');
                } else {
                     if ($ar[\'haschild\']==1) 
                      $t->parse(treemenu.items.child_lastnode\');
                    else $t->parse(treemenu.items.nochild_lastnode\');
                }
            $t->parse(treemenu.items\');
...
            $t->return(treemenu);
...