1 视图
1.1 视图渲染(display和fetch)
1.1.1 display
- 格式:display($template=’ ',$charset=‘ ’,$contentType=‘ ’,$content=‘ ’,$prefix=‘ ’)
参数 | 说明 |
---|
template | 指定模板文件 |
charset | 编码 |
contentType | 输出类型 |
content | 输出内容 |
prefix | 模板缓存前缀 |
- 方式一:不传递任何参数
对于display方法不传递任何参数,TP会自动定位到当前控制下的对应的同名方法的模板中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1c0a251260cf2b02c267d13735379eb2.png)
- 方式二:当前控制器下的具体模板
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e872212478390c91814cc5cd231714b1.png)
- 方式三:其他控制器下的模板
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1ac3b214d60f80b71d129cb1f96384b8.png)
注:这里是访问了View/Goods2/add.html文件 - 方式四:[模块@][控制器:][操作]
class GoodsController extends Controller{
public function index(){
$this->display('Admin@Goods:add');
}
}
- 完整的模板文件名
$this->display('./add.html');
注:". /"指的是根目录(在我的项目里根目录是TPdemo)#
1.1.2 display与fetch的区别
- 两个方法都一模一样
- display:获取要输出的内容,直接输出
- fetch:获取要输出的内容,但不会自动输出,一般与show方法结合,先用fetch获取,再用show输出
1.2 模板替换
1.2.1 TP内置的模板规则
参数 | 说明 |
---|
ROOT | ROOT会替换成当前网站的地址(不含域名) |
APP | 替换当前应用的url地址(不含域名) |
MODULE | 替换当前模块的url地址(不含域名) |
CONTROLLER | 替换当前控制器的url地址(不含域名) |
ACTION | 替换当前操作的url地址(不含域名) |
SELF | 替换当前页面url |
PUBLIC | 替换当前网站的公共目录 通常是/Public/ |
PUBLIC_ADMIN | 自定义的模板替换 |
1.2.2 自定义的模板规则
return array(
'TMPL_PARSE_STRING'=>array(
__PUBLIC_ADMIN__=>'/Public/Admin'
),
);
1.3 模板变量赋值与显示
1.3.1 方式一
$this->assign(‘name’,$value);
1.3.2 方式二
$this->data=$data;
1.4 系统变量
- 系统变量可以在模板中直接使用,不需要赋值。可以输出TP内置配置项信息、TP或PHP内置常量、PHP超全局数组
- 系统变量一般{$Think开头
在testSys.html中写入如下代码:
输出TP的配置项:{$Think.config.DEFAULT_MODULE}<br>
输出TP的内置常量:{$Think.CONTROLLER_NAME}<br>
输出PHP的配置项:{$Think.PHP_VERSION}<br>
输出PHP的超全局数组:{$Think.get.id}<br>
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d35052f2f0a40093387510aefba143b9.png)
1.5 模板函数
- 在模板中使用某个函数(PHP内置函数或TP公共函数)将具体的数据转换成其他格式
在testFunc.html中写入:
1、使用PHP原生代码实现转换操作:<? php echo date('Y-m-d H:i:s',$time):?><br>
2、TP模板引擎实现转换:{$time|date='Y-m-d H:i:s',
3、特殊写法:{:date('Y-m-d H:i:s',$time)}<br>
4、使用U函数生成连接地址:{:U('index','id=4')}<br>
在GoodsController.class.php中写入:
public function testFunc(){
$time=time();
$this->assign('time',$time);
$this->display();
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5dafbe37f89835c3f83bd46540a9185a.png)
1.6 模板运算符
在calculator.html中写入:
a+b={$a+$b}<br>
a-b={$a-$b}<br>
a*b={$a*$b}<br>
a/b={$a/$b}<br>
数组运算:{$data['price']*$data['num'] }
在calculator.html中写入:
public function calculator(){
$this->assign('a',10);
$this->assign('b',2);
$data=array('price'=>100,'num'=>3);
$this->assign('data',$data);
$this->display();
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/079bd043a7b6bcf2673902c986159766.png)
注意:数组运算不再支持点语法
1.7 内置标签
1.7.1 foreach标签
<foreach name="list" item="vo" key="k">
{$k}|{$vo.id}:{$vo.name}
</foreach>
参数 | 说明 |
---|
name | 指定数据 |
item | 每次循环的临时变量 |
key | 每次循环的下标名称 |
在testForeach.html中写入:
<foreach name="data" item="vo" key="k">
下标:{$k}----name:{$vo.name}----version:{$vo.version}<br>
</foreach>
在calculator.html中写入:
public function testForeach(){
$data=array(
'a'=>array('name'=>'tp1','version'=>5.0),
'b'=>array('name'=>'tp2','version'=>3.2)
);
$this->assign('data',$data);`<if condition="{$name eq 1} OR {$name gt 100}">value1
<elseif condition="$name eq2" />value2
<else />value3
</if>`
$this->display();
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9f71ecf74100cee85d37a955638a39c8.png)
1.7.2 if标签
<if condition="{$name eq 1} OR {$name gt 100}">value1
<elseif condition="$name eq2" />value2
<else />value3
</if>
参数 | 说明 |
---|
eq或equal | 等于 |
neq或notequal | 不等于 |
gt | 大于 |
egt | 大于等于 |
lt | 小于 |
elt | 小于等于 |
heq | 恒等于 |
nheq | 不恒等于 |
<if condition="$num eq 7">
num等于7
<elseif condition="($num gt 0) and ($day lt 6)" />
num大于0,小于6
<else />
num未知
</if>
1.7.3 比较标签
<比较标签 name="变量" value="值">
内容
</比较标签>
参数 | 说明 |
---|
eq或equal | 等于 |
neq或notequal | 不等于 |
gt | 大于 |
egt | 大于等于 |
lt | 小于 |
elt | 小于等于 |
heq | 恒等于 |
nheq | 不恒等于 |
<eq name="num" value="2">
num等于2
<else />
num不等于2
</eq>
1.7.4 volist标签
<volist name="list" id="vo" mod="2" empty="没有内容" offset="2" length="2" key="keys">
内容
</volist>
参数 | 说明 |
---|
name | 循环变量名 |
id | 循环的临时变量名 |
mod | |
empty | 当循环变量为空时,显示empty的内容(不支持empty内容) |
offset | 偏移量(从哪个元素开始循环) |
length | 循环次数 |
key | 指定下标变量名称 |
volist标签实现基本功能:<BR>
<volist name="data" id="vo">
循环原始下标:{$key}----{$vo.name}<br>
</volist>
<hr>
volist标签实现偏移量和长度:<BR>
<volist name="data" id="vo" offset="2" length="2">
循环原始下标:{$key}----{$vo.name}<br>
</volist>
<hr>
volist标签指定循环下标:<BR>
<volist name="data" id="vo" offset="2" length="2" key="keys">
循环原始下标:{$key}----指定下标:{$keys}----{$vo.name}<br>
</volist>
<hr>
volist标签指定mod:<BR>
<volist name="data" id="vo" mod="3">
循环原始下标:{$key}----指定mod:{$mod}----{$vo.name}<br>
</volist>
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/29ebc9f0e5241366cebd091d1614eaad.png)