Volmir
Новичок
Создал класс-шаблонизатор на PHP5 - покритикуйте, похвалите, поправьте, выскажите свое мнение, пожалуйста.
Цель написания класса - использовать его для написания мелких и средних проектов для Веба (чтобы был всегда под рукой и были знакомые вызовы функций, примеры использования). Так же была установка на быстродействие, легкость, читаемость кода и простоту использования, небольшой объем, очищение памяти после себя и т.п.
Собственно, сам класс:
И пример его вызова:
И код шаблонов:
Цель написания класса - использовать его для написания мелких и средних проектов для Веба (чтобы был всегда под рукой и были знакомые вызовы функций, примеры использования). Так же была установка на быстродействие, легкость, читаемость кода и простоту использования, небольшой объем, очищение памяти после себя и т.п.
Собственно, сам класс:
PHP:
/**
* Class for parse and show templates
*
*/
class View
{
private $_path;
public $vars = array();
public function __construct($path = '')
{
$this->_path = $_SERVER['DOCUMENT_ROOT'] . $path;
}
/**
* Set variables
*
* @param variable name $name
* @param variable value $value
*/
public function set($name, $value)
{
$this->vars[$name] = $value;
}
/**
* Clear view data
*
*/
public function clear() {
unset($this->vars);
}
/**
* Parse template
*
* @param filename $template
* @return text
*/
public function parse($template)
{
if (file_exists($this->_path . $template))
{
if (count($this->vars)) {
extract($this->vars, EXTR_SKIP);
}
ob_start();
include($this->_path . $template);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
else
{
throw new Exception('The template file "' . $template . '" does not exist');
}
}
/**
* Show template content
*
* @param filename $template
*/
public function display($template)
{
echo $this->parse($template);
}
}
PHP:
include_once('lib/view.class.php');
$view = new View('/templates/');
$view->set('title', 'Title');
$view->set('header', 'Header');
$view->set('menu', $view->parse('menu.tpl'));
$view->set('content', $view->parse('content.tpl'));
$view->display('header.tpl');
$view->display('index.tpl');
$view->display('footer.tpl');
PHP:
<!-- begin source of "header.tpl" -->
<html>
<head>
<title><?php echo $title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<!-- end source of "header.tpl" -->
<!-- begin source of "index.tpl" -->
<?php echo $menu; ?>
<hr />
<h1><?php echo $header; ?></h1>
<?php echo $content; ?>
<!-- end source of "index.tpl" -->
<!-- begin source of "footer.tpl" -->
</body>
</html>
<!-- end source of "footer.tpl" -->