浅析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 相关文章推荐
PHP4之真OO
Oct 09 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
php 获取远程网页内容的函数
Sep 08 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
php单例模式示例分享
Feb 12 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
PHP的几个常用加密函数
Feb 03 PHP
php中的buffer缓冲区用法分析
May 31 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
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
解析argc argv在php中的应用
2013/06/24 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
JS实现放大镜效果
2020/09/21 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
公务员检讨书
2014/11/01 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
追讨欠款律师函
2015/06/24 职场文书
运动会开幕式致辞
2015/07/29 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
python 算法题——快乐数的多种解法
2021/05/27 Python
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
Python学习之包与模块详解
2022/03/19 Python