模板解析器类
模板解析器类可以解析你的视图文件中的伪变量。它可以解析简单的变量或者以变量作为标签的结构。如果你以前没有用过模板引擎,那么伪变量如下所示:
这些变量不是标准的PHP变量,但是这样的以文本形式展现可以让你很容易地区分出它与PHP变量的不同之处。 **注意:**因为在视图文件中使用纯PHP要快一些,所以CodeIgniter不要求你一定要用这个类。然而,有一些开发者和对使用PHP有困难的设计师一同工作时,更愿意使用模板引擎。 **备注:**模板解析类不是一个完善的模板解析方案。为了保持最高性能,我们的模板解析类非常精简。 ## 类的初始化 如同CI中的其他类, 使用_$this->load->library_ 函数在控制器中初始化模板解析类:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
一旦加载,模板解析类可以这样使用: _$this->parser_ 下面的函数在库中可用: ## $this->parser->parse() 这个方法接收一个模板名和数据数组作为输入,生成一个解析过的版本。例如:
$this->load->library('parser');
第一个参数包含[视图]($527964f15e81a46c.md)文件的文件名(在这个例子中是blog_template.php),第二个参数包含一个用于模板替换的相关数组。 在上面的例子中,这个模板包含两个变量:{blog_title} 和 {blog_heading} 不用“echo”或处理_$this->parser->parse()_返回的数据。他会自动传送数据到output类最终输出到浏览器。然而,如果你想返回数据而不是发送到output类,你可以使用TRUE(布尔值)作为第三个参数。
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading'
);
$this->parser->parse('blog_template', $data);
$string = $this->parser->parse('blog_template', $data, TRUE);
$this->parser->parse_string()
此方法和parse()方法类似,第一个参数是一个模板文件名字符串。
变量对
上面的示例代码中演示简单变量的替换。如果你想要替换整个块的变量,这个块的每行都包含新值?想象一下在页面最顶端我们展示的例子:
在上面的代码中你会注意到一对变量: {blog_entries} 数据…… {/blog_entries}。像这样,在这对变量中间的数据将会被多次替换,替换的次数取决于结果集的行数。 除了要根据你的数据提供一个多维数组以外,变量对的解析代码和单个变量的解析代码相同。参考下面的例子:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
如果你的“数据对”来自数据库的查询,那么它已经是一个二维数组,你可以轻松的使用数据库 result_array() 函数:
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => array(
array('title' => 'Title 1', 'body' => 'Body 1'),
array('title' => 'Title 2', 'body' => 'Body 2'),
array('title' => 'Title 3', 'body' => 'Body 3'),
array('title' => 'Title 4', 'body' => 'Body 4'),
array('title' => 'Title 5', 'body' => 'Body 5')
)
);
$this->parser->parse('blog_template', $data);
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => $query->result_array()
);
$this->parser->parse('blog_template', $data);
翻译贡献者:buttonfly, Hex, Jacklee, lishen2, lomatus
当前内容版权归 CodeIgniter中国 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 CodeIgniter中国 .