浅析ThinkPHP的模板输出功能


Posted in PHP onJuly 01, 2014

ThinkPHP中的每一个xxxAction.class.php文件就代表着一个应用模块,这个Action中的每一个方法(function)代表着一个操作,操作可以分为有输出到模板的操作和只具执行不需要输出的操作。
打开Myapp/Lib/Action/IndexAction.class.php文件,我们可以看到里面的基础代码:

class IndexAction extends Action{
public function index(){
}
}

对此,需要指出一下几点:

1.在ThinkPHP的开发中,要增加一个应用模块,就要在Action文件夹里建立一个类,类的文件命名格式是“模块名称+Action.class.php”。例如我们这里的应用模块是Index,所以定义文件名为IndexAction.class.php。
2.应用模块类的定义要继承框架的Action类。要为这个应用模块添加一个操作,则定义一个以此操作为命名的function.例如上面的index操作。

通常一个应用模块中,会有若干操作(function)需要有与用户交互的页面,这就需要用到模板输出,ThinkPHP本身已内置了一套具有ThinkPHP特色的,很强大易扩展但应用非常方便兼简单的模板引擎。
在应有模块中,如果某个操作是需要页面显示的,只要对应在Myapp/Tpl/default/里建立一个文件夹,文件夹以应用模块的名称来命名,然后在这个文件夹下,建立一个以这个function名称来命名的html文件,就可以在这个方法中使用$this->display()方法来直接调用该模板。(当然也可以调用其它模块下的其它模板或显式指定模板文件位置和名称,由于是循序渐进式的学习,就让我们先忽略吧)了解这些理论后,我们先简单实操一下这些知识。
(1)在Myapp/Tpl/default/下建立一个文件夹,根据应用模块的名称,我们将这个文件夹命名为Index
(2)在Myapp/Tpl/default/Index/下建立一个html文件,根据操作名称,我们命名该文件为index.html
(3)打开Myapp/Lib/Action/IndexAction.class.php文件,修改代码为

<?php
class IndexAction extends Action{
public function index(){
$value =  'hello,ThinkPHP';
$this->assign('name',$value);
$this->display();
}
}
?>

(摘自手册:ThinkPHP模板指南,此后的知识要点均来自ThinkPHP官方手册,不再申明)
在Action类里面使用 assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。

$this->assign('name',$value);

// 下面的写法是等效的

$this->name = $value ;

// 模板变量赋值后就需要调用模板文件来输出相关的变量,模板调用通过display方法来实现

$this->display();

4 打开Myapp/Tpl/default/Index/index.html文件,代码为

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>{$name}</title>
</head>
<body>
测试输出: {$name}
</body>
</html>

此处注意:模板变量使用{$变量名称}这种标签进行输出。

不同的模板变量类型,使用不同的标签,标签可以自行另外定义,暂且不理会。

5 打开浏览器输入地址:<http://127.0.0.1/>,我们可以看到,定义的模板变量已经输出来了。

附加补充知识:

1 如果要同时输出多个模板变量,可以使用下面的方式:

$array = array();
$array['name']  =  'thinkphp';
$array['email']  =  '123456@vip.qq.com';
$array['phone']  =  '123456';
$this->assign($array);

这样,就可以在模板文件中同时输出name、email和phone三个变量。

2 我们使用上面的变量定义,将整个数组定义为一个模板变量来输出

$array = array();
$array['name']  =  'thinkphp';
$array['email']  =  '123456@vip.qq.com';
$array['phone']  =  '123456';
$this->assign('array',$array);
$this->display();

在html中,要输出$array['name']的值,代码是
{$array.name} 或 {$array['name']}

3 将这个数组循环输出

(1) IndexAction.class.php中代码更改如下

<?php
class IndexAction extends Action{
public function index(){
$array = array();
$array['name']  =  'thinkphp';
$array['email']  =  '123456@vip.qq.com;
$array['phone']  =  '123456';
$value =  'hello,ThinkPHP';
$this->assign('array',$array);
$this->assign('name',$value);
$this->display();
}
}
?>

(2) 将Myapp/Tpl/default/Index/index.html代码更改如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>{$name}</title>
</head>
<body>
<iterate name="array" id="vo">
{$vo}<br />
</iterate>
</body>
</html>

注意:name='array'是指要循环的模板变量是array,id='vo'是指这个数据在模板输出时所使用的名称

PHP 相关文章推荐
浅谈PHP语法(1)
Oct 09 PHP
一个php作的文本留言本的例子(五)
Oct 09 PHP
PHP脚本的10个技巧(5)
Oct 09 PHP
第二节--PHP5 的对象模型
Nov 16 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 #PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 #PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 #PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 #PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 #PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 #PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 #PHP
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
PyQt5实现简易计算器
2020/05/30 Python
python频繁写入文件时提速的方法
2019/06/26 Python
Python flask框架post接口调用示例
2019/07/03 Python
Python获取时间戳代码实例
2019/09/24 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
如何用python免费看美剧
2020/08/11 Python
css sprite简单实例
2016/05/23 HTML / CSS
介绍一下代理模式(Proxy)
2014/10/17 面试题
《匆匆》教学反思
2014/02/22 职场文书
婚前协议书范本
2014/04/15 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
聘任书格式及范文
2015/09/21 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS