模板解析器类

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

  1. <html>
  2. <head>
  3. <title>{blog_title}</title>
  4. </head>
  5. <body>
  6. <h3>{blog_heading}</h3>
  7. {blog_entries}
  8. <h5>{title}</h5>
  9. <p>{body}</p>
  10. {/blog_entries}
  11. </body>
  12. </html>
这些变量不是标准的PHP变量,但是这样的以文本形式展现可以让你很容易地区分出它与PHP变量的不同之处。 **注意:**因为在视图文件中使用纯PHP要快一些,所以CodeIgniter不要求你一定要用这个类。然而,有一些开发者和对使用PHP有困难的设计师一同工作时,更愿意使用模板引擎。 **备注:**模板解析类不是一个完善的模板解析方案。为了保持最高性能,我们的模板解析类非常精简。 ## 类的初始化 如同CI中的其他类, 使用_$this->load->library_ 函数在控制器中初始化模板解析类:
  1. $this->load->library('parser');
一旦加载,模板解析类可以这样使用: _$this->parser_ 下面的函数在库中可用: ## $this->parser->parse() 这个方法接收一个模板名和数据数组作为输入,生成一个解析过的版本。例如:
  1. $this->load->library('parser');
  2. $data = array(
  3. 'blog_title' => 'My Blog Title',
  4. 'blog_heading' => 'My Blog Heading'
  5. );
  6. $this->parser->parse('blog_template', $data);
第一个参数包含[视图]($527964f15e81a46c.md)文件的文件名(在这个例子中是blog_template.php),第二个参数包含一个用于模板替换的相关数组。 在上面的例子中,这个模板包含两个变量:{blog_title} 和 {blog_heading} 不用“echo”或处理_$this->parser->parse()_返回的数据。他会自动传送数据到output类最终输出到浏览器。然而,如果你想返回数据而不是发送到output类,你可以使用TRUE(布尔值)作为第三个参数。
  1. $string = $this->parser->parse('blog_template', $data, TRUE);

$this->parser->parse_string()

此方法和parse()方法类似,第一个参数是一个模板文件名字符串。

变量对

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

  1. <html>
  2. <head>
  3. <title>{blog_title}</title>
  4. </head>
  5. <body>
  6. <h3>{blog_heading}</h3>
  7. {blog_entries}
  8. <h5>{title}</h5>
  9. <p>{body}</p>
  10. {/blog_entries}
  11. </body>
  12. </html>
在上面的代码中你会注意到一对变量: {blog_entries} 数据…… {/blog_entries}。像这样,在这对变量中间的数据将会被多次替换,替换的次数取决于结果集的行数。 除了要根据你的数据提供一个多维数组以外,变量对的解析代码和单个变量的解析代码相同。参考下面的例子:
  1. $this->load->library('parser');
  2. $data = array(
  3. 'blog_title' => 'My Blog Title',
  4. 'blog_heading' => 'My Blog Heading',
  5. 'blog_entries' => array(
  6. array('title' => 'Title 1', 'body' => 'Body 1'),
  7. array('title' => 'Title 2', 'body' => 'Body 2'),
  8. array('title' => 'Title 3', 'body' => 'Body 3'),
  9. array('title' => 'Title 4', 'body' => 'Body 4'),
  10. array('title' => 'Title 5', 'body' => 'Body 5')
  11. )
  12. );
  13. $this->parser->parse('blog_template', $data);
如果你的“数据对”来自数据库的查询,那么它已经是一个二维数组,你可以轻松的使用数据库 result_array() 函数:
  1. $query = $this->db->query("SELECT * FROM blog");
  2. $this->load->library('parser');
  3. $data = array(
  4. 'blog_title' => 'My Blog Title',
  5. 'blog_heading' => 'My Blog Heading',
  6. 'blog_entries' => $query->result_array()
  7. );
  8. $this->parser->parse('blog_template', $data);

翻译贡献者:buttonfly, Hex, Jacklee, lishen2, lomatus