# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 模板解析器类

模板解析器类可以解析你的视图文件中的伪变量。它可以解析简单的变量或者以变量作为标签的结构。如果你以前没有用过模板引擎，那么伪变量如下所示：

`<html>
<head>
<title>`{blog_title}`</title>
</head>
<body>
<h3>`{blog_heading}`</h3>
`{blog_entries}`
<h5>`{title}`</h5>
<p>`{body}`</p>
`{/blog_entries}`
</body>
</html>`

这些变量不是标准的PHP变量，但是这样的以文本形式展现可以让你很容易地区分出它与PHP变量的不同之处。

注意：因为在视图文件中使用纯PHP要快一些，所以CodeIgniter不 要求你一定要用这个类。然而，有一些开发者和对使用PHP有困难的设计师一同工作时，更愿意使用模板引擎。

Also Note: 模板解析类不是一个完善的模板解析方案。为了保持最高性能，我们的模板解析类非常精简。

## 类的初始化

如同CI中的其他类, 使用$this->load->library 函数在控制器中初始化模板解析类：

`$this->load->library('parser');`

一旦加载，模板解析类可以这样使用: $this->parser

下面的函数在库中可用：

## $this->parser->parse()

这个方法接收一个模板名和数据数组作为输入，生成一个解析过的版本。例如：

`$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading'
);
$this->parser->parse('blog_template', $data);`

第一个参数包含视图文件的文件名(在这个例子中是blog_template.php), 第二个参数包含一个用于模板替换的相关数组。 在上面的例子中，这个模板包含两个变量：{blog_title} 和 {blog_heading}

不用“echo”或处理$this->parser->parse()返回的数据。他会自动传送数据到output类最终输出到浏览器。然而，如果你想返回数据而不是发送到output类，你可以使用TRUE(布尔值)作为第三个参数。

`$string = $this->parser->parse('blog_template', $data, TRUE);`

## $this->parser->parse_string()

This method works exactly like parse(), only accepts a string as the first parameter in place of a view file.

## 变量对

上面的示例代码中演示简单变量的替换。如果你想要替换整个块的变量，这个块的每行都包含新值？想象一下在页面最顶端我们展示的例子：

`<html>
<head>
<title>`{blog_title}`</title>
</head>
<body>
<h3>`{blog_heading}`</h3>
`{blog_entries}`
<h5>`{title}`</h5>
<p>`{body}`</p>
`{/blog_entries}`
</body>
</html>`

在上面的代码中你会注意到一对变量： `{blog_entries}` 数据…… `{/blog_entries}`。 像这样，在这对变量中间的数据将会被多次替换，替换的次数取决于结果集的行数。

除了要根据你的数据提供一个多维数组以外，变量对的解析代码和单个变量的解析代码相同。参考下面的例子：

`$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);`

如果你的“数据对”来自数据库的查询，那么它已经是一个二维数组，你可以轻松的使用数据库 result_array() 函数：

`$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, lishen2, lomatus
最后修改: 2011-02-01 01:51:47