TP入门第十二天

1、模板技术

为何使用模板这里就不罗嗦了,直接介绍模板技术

变量传递和显示:

例如在action里面可以这样写

$title=”变量”;

$arr=array(“标题”,”内容”,’my’=>”时间”);//数组

$this->assign(‘atitle’,$title);

$this->assign(‘content’,’这是内容’);

$this->assign(‘time’,time());

$this->assign(‘mylist’,$arr);

$this->display();

这样就需要在模板里面获取

内容:{$content}

<br>

时间:{$time}

<hr>

数组测试

第一个:{$mylist[0]}<br>

第二个:{$mylist.1}<br>

第三个:{$mylist.my}<br>

如果是对象,那么就需要用:,例如:{$mylist:ff}

模板注释:格式:{/*注释内容 */ }或 {//注释内容 }

说明:在显示页面的时候不会显示模板注释,仅供模板制作的时候参考。

函数使用:在前面制作留言板的过程中,用到date函数格式化时间显示,这里说明。模板变量的函数调用格式为:

{$varname|function1|function2=arg1,arg2,### }

说明:

{和 $符号之间不能有空格,后面参数的空格就没有问题

###表示模板变量本身的参数位置

支持多个函数,函数之间支持空格

支持函数屏蔽功能,在配置文件中可以配置禁止使用的函数列表

支持变量解析缓存功能,重复变量字串不多次解析

使用例子:

{$webTitle|md5|strtoupper|substr=0,3}

编译后的PHP代码就是:

<?php echo (substr(strtoupper(md5($webTitle)),0,3)); ?>

注意函数的定义和使用顺序的对应关系,通常来说函数的第一个参数就是前面的变量或者前一个函数调用的返回结果,如果你的变量并不是函数的第一个参数,需要使用定位符号,例如:

{$create_time|date=”y-m-d”,###}

编译后的PHP是:

<?php echo (date(“y-m-d”,$create_time)); ?>

默认值输出:如果输出的模板变量没有值,但是我们需要在显示的时候赋予一个默认值的话,可以使用default语法,格式:

{$变量|default=”默认值”}

这里的default不是函数,而是系统的一个语法规则,例如:

{$user.nickname|default=”这家伙很懒,什么也没留下”}

对系统变量的输出也可以支持默认值,例如:

{$Think.post.name|default=”名称为空”}

默认值支持Html语法。

系统变量:

除了常规变量的输出外,模板引擎还支持系统变量和系统常量、以及系统特殊变量的输出。它们的输出不需要事先赋值给某个模板变量。系统变量的输出必须以$Think.打头,并且仍然可以支持使用函数。常用的系统变量输出包括下面:

用法

含义

例子

$Think.server

获取$_SERVER

{$Think.server.php_self}

$Think.get

获取$_GET

{$Think.get.id}

$Think.post

获取$_POST

{$Think.post.name}

$Think.request

获取$_REQUEST

{$Think.request.user_id}

$Think.cookie

获取$_COOKIE

{$Think.cookie.username}

$Think.session

获取$_SESSION

{$Think.session.user_id}

$Think.config

获取系统配置参数

{$Think.config.app_status}

$Think.lang

获取系统语言变量

{$Think.lang.user_type}

$Think.const

获取系统常量

{$Think.const.app_name}或{$Think.APP_NAME}

$Think.env

获取环境变量

{$Think.env.HOSTNAME}

$Think.version

获取框架版本号

{$Think.version}

$Think.now

获取当前时间

{$Think.now}

$Think.template

获取当前模板

{$Think.template}

$Think.ldelim

获取模板左界定符

{$Think.ldelim}

$Think.rdelim

获取模板右界定符

{$Think.rdelim}

@、#、&、%、.、*(快捷输出不支持函数操作)

文件包含:格式:<include file=”完整模板文件名” />完整文件名、包含当前模块的其他操作模板文件格式:<include file=”操作名” />、其他包含请参考手册学习

导入文件:<import type=’js’ file=”Js.Util.Array” />

Type属性默认是js, 所以下面的效果是相同的:

<import file=”Js.Util.Array” />

还可以支持多个文件批量导入,例如:

<import file=”Js.Util.Array,Js.Util.Date” />

导入外部CSS文件必须指定type属性的值,例如:

<import type=’css’ file=”Css.common” />

上面的方式默认的import的起始路径是网站的Public目录,如果需要指定其他的目录,可以使用basepath属性,例如:

<import file=”Js.Util.Array”  basepath=”./Common” />

如果需要load导入,请参考手册学习

Volist详解:Volist标签主要用于在模板中循环输出数据集或者多维数组。

(这个标签很重要,一定要熟练掌握其用法)

volist标签(循环输出数据)

闭合

非闭合标签

属性

name(必须):要输出的数据模板变量id(必须):循环变量 offset(可选):要输出数据的offset length(可选):输出数据的长度 key(可选):循环的key变量,默认值为i mod(可选):对key值取模,默认为2 empty(可选):如果数据为空显示的字符串

最基本用法:

<volist name=”list” id=”vo”>

{$vo.id}

{$vo.name}

</volist>

支持输出部分数据,例如输出其中的第5~15条记录

<volist name=”list” id=”vo” offset=”5″ length=’10’>

{$vo.name}

</volist>

输出偶数记录

<volist name=”list” id=”vo” mod=”2″ >

<eq name=”mod” value=”1″>{$vo.name}</eq>

</volist>

Mod属性还用于控制一定记录的换行,例如:

<volist name=”list” id=”vo” mod=”5″ >

{$vo.name}

<eq name=”mod” value=”4″><br/></eq>

</volist>

输出循环变量

<volist name=”list” id=”vo” key=”k” >

{$k}.{$vo.name}

</volist>

如果没有指定key属性的话,默认使用循环变量i,例如:

<volist name=”list” id=”vo”  >

{$i}.{$vo.name}

</volist>

而foreach通常用于对象的循环。

运行原生php代码:<php>echo ‘Hello,world!’;</php>

这里不要在标签内部嵌入模板标签了!

原样输出:<literal>

<if condition=”$name eq 1 “> value1

<elseif condition=”$name eq 2″/>value2

<else /> value3

</if>

</literal>

也就说literal内部的是不经过模版解析的

避免js混乱:可以使用在大括号之后加入空格、使用literal、修改定界符

2、关联模型

关联关系:

一对一关联 :ONE_TO_ONE,包括HAS_ONE 和 BELONGS_TO

一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELONGS_TO

多对多关联 :MANY_TO_MANY

关联关系包括下面四种:HAS_ONE、BELONGS_TO、HAS_MANY和MANY_TO_MANY。

一个模型根据业务模型的复杂程度可以同时定义多个关联,不受限制,所有的关联定义都统一在模型类的 $_link成员变量里面定义,并且可以支持动态定义。要支持关联操作,模型类必须继承RelationModel类(重要属性请参看手册进行学习研究)

具体关联的CURD操作手册中有详细的讲解,后续开发中使用到会有详细说明

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术换美食换不换

lua

数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log, log10),...

16020
来自专栏逍遥剑客的游戏开发

PL/0语言编译程序分析

36150
来自专栏光变

Redis持久化文件RDB的格式解析

Redis的RDB文件是对内存存储的一种表示。这个二进制文件足以完全恢复Redis当时的运行状态。 RDB文件格式针对快速读写进行了优化。LZF压缩被用于减小文...

19610
来自专栏水击三千

JavaScript变量作用域

执行环境是JavaScript中比较重要的概念。执行环境定义了变量或者函数有权访问的其他数据决定了他们各自的行为,每个执行环境都有一个与之关联的变量,环境中定义...

29490
来自专栏C/C++基础

将模板申明为友元

严格来说,函数模板(类模板)是不能作为一个类的友元的,就像类模板之间不能发生继承关系一样。只有当函数模板(或类模板)被实例化之后生成模板函数(或模板类),该函数...

11310
来自专栏上善若水

P002PHP开发之变量定义

在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,在全局范围内访问变量可以用特殊的 PHP 自定义 $GL...

11630
来自专栏令仔很忙

理解javascript作用域和作用域链

作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域。

81310
来自专栏Brian

Python进阶教程(二)

概述 在上一篇博客中,我们介绍了Python进阶教程(一),还有一些新的技巧没有翻译完,我们下面来继续我们的翻译。 Intermediate Python 中译...

50580
来自专栏noteless

[五] JavaIO之InputStream OutputStream简介 方法列表说明

17420
来自专栏技术点滴

编译器构造

编译器构造 一、 编译器简介 前面谈到静态链接器构造的基本流程,最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器,本...

29280

扫码关注云+社区

领取腾讯云代金券