非常教程

Codeigniter 3参考手册

模板解析 | Template Parser

模板解析类 | Template Parser Class

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

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

<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.

模板解析 | Template Parser相关

Codeigniter 3

CodeIgniter 是一个PHP MVC框架,特点是超轻量级、有数据加密、有灵活URI路由等。对于 PHP 程序员来说,它小巧但功能强大。

主页 https://codeigniter.com/
源码 https://github.com/bcit-ci/CodeIgniter
版本 3
发布版本 3.1.5