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

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

CI 模板解析器类的更多相关文章

  1. vert.x学习(四),使用模板解析器ClassLoaderTemplateResolver

    在vert.x中使用模板解析,可以为我们带来很多方便.我这里学习了一下ClassLoaderTemplateResolver的简单使用.这次工程配置与上篇一样,不需要做任何多的配置.直接编写代码就可以 ...

  2. Boost学习之语法解析器--Spirit

    Boost.Spirit能使我们轻松地编写出一个简单脚本的语法解析器,它巧妙利用了元编程并重载了大量的C++操作符使得我们能够在C++里直接使用类似EBNF的语法构造出一个完整的语法解析器(同时也把C ...

  3. DRF之频率限制、分页、解析器和渲染器

    一.频率限制 1.频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 2.频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通 ...

  4. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制

    解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...

  5. REST framwork之解析器

    一 我们首先要知道解析器是什么以及他的功能: REST framework 包含许多内置的解析器类,允许接受各种媒体类型(media types)的请求.还支持自定义解析器,这使你可以灵活地设计 AP ...

  6. 六、django rest_framework源码之解析器剖析

    1 绪论 网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framewor ...

  7. rest_framework之解析器详解 05

    解析器就是服务端写api,对于前端用户发来的数据进行解析.解析完之后拿到自己能用数据. 本质就是对请求体中的数据进行解析. django的解析器 post请求过来之后,django 的request. ...

  8. DRF频率、分页、解析器、渲染器

    DRF的频率 频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定 ...

  9. XML 解析之 jaxp 解析器

    XML 的解析方式有两种方式: DOM 解析和 SAX 解析. DOM 解析: 根据 XML 的层级结构, 在内存中分配一个树形结构, 把 XML 的标签, 属性和文本都封装成对象. 优点: 可以实现 ...

随机推荐

  1. Android开源资料大集合_架构&UI

    1. Anroid开源框架架 https://github.com/kymjs/KJFrameForAndroidhttp://www.oschina.net/p/thinkandroid http: ...

  2. xmanager 使用

    linux 上安装xterm windows上启动命令: /usr/bin/xterm -ls -display $DISPLAY

  3. Oracle Select into 用Sql server替换

    --Oracle: DECLARE n_count int; begin Select count(*) into n_count from from M_Test where ENTITYLSH = ...

  4. c++实现单例

    单例宏: //单件定义宏 //------------------------------------- // 在头文件中申明 // DECLARE_SINGLEOBJ( CSampleClass ) ...

  5. Struts学习之类型转换

    * 从页面中获取对应的内容        * 在动作类action中,声明与页面中表单name属性的值同名的属性        * 提供get和set方法        * struts2框架就会通过 ...

  6. R与数据分析旧笔记(十四) 动态聚类:K-means

    动态聚类:K-means方法 动态聚类:K-means方法 算法 选择K个点作为初始质心 将每个点指派到最近的质心,形成K个簇(聚类) 重新计算每个簇的质心 重复2-3直至质心不发生变化 kmeans ...

  7. javascript--时钟

    <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" ...

  8. Arduino Micro USB库

    USBCore.cpp #define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_co ...

  9. karma note

    karma 简介 karma不是一个测试框架,仅仅是启动了一个httpServer karma仅仅是一个跑测试的平台(runner), 我们可以使用各种测试框架, 如: Jasmine Mocha Q ...

  10. PCB外形加工培训教材

    一.目录1.外形加工制程介绍2.外形加工机器介绍3.各制程流程介绍3.1锣板制程3.2V-Cut3.3啤板3.4斜边3.5洗板4.环保5.工业安全 1.0 外形加工制程介绍 外形加工包括: 1.1锣板 ...