directory search
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
characters

模板解析器类可以对视图文件中包含的伪变量执行简单的文本替换。它可以解析简单变量或变量标签对。

如果您从未使用过模板引擎,则伪变量名称将被括在大括号中,如下所示:

<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(视图文件)。

注意

CodeIgniter也不会要求你使用这个类,因为用纯PHP在您的视图页面让他们跑快一点。但是,有些开发人员喜欢使用模板引擎,如果他们与设计人员一起工作,他们会觉得使用PHP会遇到一些困惑。

重要

模板解析器类不是完整的模板解析解决方案。为了保持最佳性能,我们一直非常精益求精。

  • 使用模板解析器类

    • 初始化类

    • 解析模板

    • 变量对

    • 使用说明

    • 查看片段

  • 类参考

使用模板解析器类

初始化类

像CodeIgniter中的大多数其他类一样,解析器类在您的控制器中使用以下$this->load->library()方法进行初始化:

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

一旦加载,解析器库对象将可用:$ this-> parser

解析模板

您可以使用该parse()方法来解析(或呈现)简单模板,如下所示:

$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}

没有必要对$ this-> parser-> parse()返回的数据进行“回显”或做些什么。它会自动传递给输出类以发送到浏览器。但是,如果您希望返回数据而不是发送到输出类,则可以传递TRUE(布尔值)作为第三个参数:

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

变量对

上面的示例代码允许替换简单的变量。如果你想要重复一整块变量,每次迭代包含新值,该怎么办?考虑我们在页面顶部显示的模板示例:

<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}。在这种情况下,这些对之间的整个数据块将重复多次,与参数数组的“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);

使用说明

如果包含模板中未引用的替代参数,则会忽略它们:

$template = 'Hello, {firstname} {lastname}';
$data = array(        'title' => 'Mr',        'firstname' => 'John',        'lastname' => 'Doe');
$this->parser->parse_string($template, $data);// Result: Hello, John Doe

如果不包含在模板中引用的替换参数,则原始伪变量将显示在结果中:

$template = 'Hello, {firstname} {initials} {lastname}';
$data = array(        'title' => 'Mr',        'firstname' => 'John',        'lastname' => 'Doe');
$this->parser->parse_string($template, $data);// Result: Hello, John {initials} Doe

如果您希望在数组期望时提供字符串替换参数,例如,对于变量对,则替换操作将针对打开的变量对标记完成,但闭合变量对标记不能正确呈现:

$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})';
$data = array(        'degrees' => 'Mr',        'firstname' => 'John',        'lastname' => 'Doe',        'titles' => array(                array('degree' => 'BSc'),                array('degree' => 'PhD')        ));$this->parser->parse_string($template, $data);// Result: Hello, John Doe (Mr{degree} {/degrees})

如果您将您的一个替代参数命名为与变量对内使用的替代参数相同,则结果可能与预期不符:

$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})';
$data = array(        'degree' => 'Mr',        'firstname' => 'John',        'lastname' => 'Doe',        'degrees' => array(                array('degree' => 'BSc'),                array('degree' => 'PhD')        ));$this->parser->parse_string($template, $data);// Result: Hello, John Doe (Mr Mr )

查看片段

您不必使用变量对来获得视图中迭代的效果。可以在变量对内使用视图片段,并在控制器中而不是在视图中控制迭代。

在视图中控制迭代的示例:

$template = '<ul>{menuitems}        <li><a href="{link}">{title}</a></li>{/menuitems}</ul>';$data = array(        'menuitems' => array(                array('title' => 'First Link', 'link' => '/first'),                array('title' => 'Second Link', 'link' => '/second'),        ));$this->parser->parse_string($template, $data);

结果:

<ul>        <li><a href="/first">First Link</a></li>        <li><a href="/second">Second Link</a></li></ul>

在控制器中使用视图片段控制迭代的示例:

$temp = '';$template1 = '<li><a href="{link}">{title}</a></li>';$data1 = array(        array('title' => 'First Link', 'link' => '/first'),        array('title' => 'Second Link', 'link' => '/second'),);foreach ($data1 as $menuitem){
        $temp .= $this->parser->parse_string($template1, $menuitem, TRUE);}$template = '<ul>{menuitems}</ul>';$data = array(        'menuitems' => $temp);$this->parser->parse_string($template, $data);

结果:

<ul>        <li><a href="/first">First Link</a></li>        <li><a href="/second">Second Link</a></li></ul>

类参考

class CI_Parserparse($template, $data[, $return = FALSE])

参数:

$ template(string) - 查看文件的路径$ data(array) - 变量数据$ return(bool) - 是否仅返回解析的模板

返回:

解析模板字符串

返回类型:

  • $ templatestring) - 查看文件的路径

  • $ data数组) - 变量数据

  • $ returnbool) - 是否只返回解析的模板

返回:解析模板字符串
Return type:  string
从提供的路径和变量中解析模板。

parse_string($template, $data[, $return = FALSE])

参数:

$ template(string) - 查看文件的路径$ data(array) - 变量数据$ return(bool) - 是否仅返回解析的模板

返回:

解析模板字符串

返回类型:

  • $ templatestring) - 查看文件的路径

  • $ data数组) - 变量数据

  • $ returnbool) - 是否只返回解析的模板

Returns:  Parsed template string
Return type:  string
该方法与`parse()`完全相同,只是它接受模板作为字符串而不是加载视图文件。

set_delimiters([$l = '{'[, $r = '}']])

参数:

$ l(字符串) - 左分隔符$ r(字符串) - 右分隔符

返回类型:

空虚

  • $ l字符串) - 左分隔符

  • $ r字符串) - 右分隔符

Return type:  void
Sets the delimiters (opening and closing) for a pseudo-variable “tag” in a template.
Previous article: Next article: