Вот упрощенная версия того, как я делаю шаблоны с моим текущим проектом, если он используется:
class Template {
var $pagename = 'index';
function __construct() {
$this->pagename = basename($_SERVER['SCRIPT_NAME'], '.php');
register_shutdown_function(array($this, 'do_output'));
}
function do_output() {
$this->header();
$this->display($this->pagename);
$this->footer();
}
function __call($template, array $params) {
call_user_func(array($this, 'display'), $template, params);
}
function display($template, array $params = null) {
include "templates/$template.php";
}
}
Идея заключается в том, что вы можете написать "include 'Template.inc'; new Template;" и он организует автоматический запуск do_output () в конце скрипта. Из этого осталось несколько вещей, таких как метод передачи переменных в шаблон.
Вы упомянули, что не используете PHP, и там есть несколько PHP-измов: register_shutdown_function () гарантирует, что шаблоны будут вызываться перед деструкторами объекта, но после основного скрипта, и вызовами $ this-> header () / footer () - это вызовы магических функций, которые просто отображают ('header') и display ('footer'), они должны быть переопределены.
Конечно, нет ничего плохого в использовании переключателя, как в примере, который вы опубликовали, но вам не нужны верхние / нижние колонтитулы внутри каждого оператора case. Нечто подобное сделало бы то же самое:
require "templates/header.php";
require "templates/navigation.php";
switch ($page)
{
case "home":
require "views/home.php";
break;
case "search":
require "views/search.php";
break;
}
require "templates/footer.php";
... или вы могли бы заменить switch () чем-то, основанным на имени файла, как я использовал выше, если это работает так, как настроены ваши страницы. Переключение - это самый безопасный способ, если вы планируете делать это через параметры URL.