我想构建并使用一个超级简单的PHP模板类。我不需要支持任何自定义标签或任何东西。
只需要能够从类外部分配变量,然后在模板文件中解析它们。
然后我需要能够将解析的HTML输出返回给变量。
另一个不错的功能是能够将模板文件嵌套在另一个中,我很久以前就已经看过这个了,并且它非常简单。
我无法访问任何旧的模板类PHP代码,因此我可以使用任何帮助来构建一个轻量级,快速且非常简单的类来完成上述任务。我不想使用现有的模板系统!
理论上我认为它应该与此类似......
//Instantiate a Template object
$template = new Template("path/to/template.php");
// Set some Template variables that can be accessed inside the template file
$template->title = "Hello world!";
$template->description = "This is a ridiculously simple template";
$template->posts = array();
// Return the processed template file to a variable
$outputHtml = $template->render();
模板文件本身可能就像这样......
<html>
<head>
// Header scripts and content
</head>
<body>
// Body content
<h1><?php echo $this->title; ?></h1>
<div><?php echo $this->description; ?></div>
<?php
print_r($this->posts);
foreach($this->posts as $key => $value){
echo $key;
echo '<br>';
echo $key;
}
?>
</body>
</html>
PHP模板类可能看起来像这样....
class Template
{
protected $template;
protected $variables = array();
public function __construct($template)
{
$this->template = $template;
}
public function __get($key)
{
return $this->variables[$key];
}
public function __set($key, $value)
{
$this->variables[$key] = $value;
}
public function render()
{
extract($this->variables);
chdir(dirname($this->template));
ob_start();
include basename($this->template);
return ob_get_clean();
}
}
所以我能做些什么来改善这个?还可以在模板内部嵌套模板以更好地工作吗?
答案 0 :(得分:4)
我知道这是帖子是从2014年开始,但是我遇到了模板类的同样问题,以下是我能够解决问题的方法:
这是控制器: index.php
<?php require 'core/init.php' ;
// Get template and assign vars
$template = new Template('templates/frontpage.php');
// Assign Vars
$template->title = "Hello world!";
$template->description = "This is a ridiculously simple template";
echo $template;
模板类: Template.php
<?php
/*
* Template Class
* Creates a template/view object
*/
class Template {
//Path to template
protected $template;
//Variables
protected $vars = array();
/*
* Class Constructor
*/
public function __construct($template){
$this->template = $template;
}
/* __get() and __set() are run when writing data to inaccessible properties.
* Get template variables
*/
public function __get($key){
return $this->vars[$key];
}
/*
* Set template variables
*/
public function __set($key, $value){
$this->vars[$key] = $value;
}
/*
* Convert Object To String
*/
public function __toString(){
extract($this->vars); // extract our template variables ex: $value
// print_r($this->vars ) ; testing
chdir(dirname($this->template));
ob_start(); // store as internal buffer
include basename($this->template); // include the template into our file
return ob_get_clean();
}
}
视图: frontpage.php
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title></title>
<link rel="stylesheet" type="text/css" media="screen" href="css/master.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php echo title ; ?>
<?php echo description ; ?>
</body>
</html>
答案 1 :(得分:0)
我认为这是设计PHP模板的更好方法