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操作手册中有详细的讲解,后续开发中使用到会有详细说明