第15节:ThinkPHP 3.1.2 模板变量详解
1、模版基本使用
IndexAction里添加index方法,内容为:
$this->assign('name','赵桐正'); // 将值“赵桐正”交给标识“name”
$this->display(); //显示模版,Tpl文件夹下默认index.html
Tpl下的模版index.html里显示模版变量name的值
{$name}
模版变量的值是由后台分配过来的。
2、模版变量输出:
支持标量输出;字符串、数字、bool等
支持常规数组输出;
(在index方法中,添加数组,$arr = array('a','b'); $this->assign('name',$arr);
在模版中,{$name[0]}; 则会输出'a)
支持关联数组输出;
($arr = array('k1'=>'a','k2'=>'b');
{$name['k1']}; 则会输出a;
另外,关联数组还可以使用{$name.k1}也能同样输出)
支持对象输出;
$obj= new test; $this->assign('name',$obj);
{$name:k} 或者 {$name->k} //k是对象里的一个属性
3、系统变量
在模版中直接获取系统变量的值,如POST GET SESSION SERVER等值
$Think.get.name; 模版可以直接读取地址栏里默认为get提交的数据 :index/name/ztz
$Think.session.id;输出session变量里的id
$Think.const.APP_NAME; 输出常量里的APP_NAME
4、使用函数
例如在模版中对传递过来的值进行md5加密:{$name|md5} 它在编译时会自动变成 <?php echo (md5($name)); ?>
例如时间戳处理显示。time=time(); {$name|date='Y-m-d H:i:s' , ### } 其中###是占位符,编译时被$name替换。
在Runtime的Cache文件里有编译代码。
5、默认值
设置默认值 {$name|default='默认'} 若$name未赋值,则取默认值
6、运算符
+ - * / % ++ --
{$name++}
第16 17 18节:ThinkPHP 3.1.2 模板中的语法知识
一、导入CSS和JS文件
1、传统导入方式:
CSS:<link rel='stylesheet' type='text/css' href='__PUBLIC__/Css/test.css'/>
JS: <script src='__PUBLIC__/Js/test.js'></script>
其中,__PUBLIC__会自动被模版引擎替换成路径:在项目所在同级目录下创建文件夹Public,内部创建Css和Js两个文件夹。然后在Css里建立test.css、test.js即可调用。
2、import标签导入外部CSS和JS:
<import type='css' file='Css.test' />
<import file='Js.test' /> import默认是js文件,可以省略 type属性
注意:若CSS JS文件夹不是放在Public文件夹内,而是同级的其他(My文件夹)文件夹内。在模版调用时要设置 basepath='./My/'
即:<import type='css' file='Css.test' basepath='./My' />
3、load标签 自动检测css或js,只需要地址
<load href='__PUBLIC__/Css/test.css' />
二、分支结构
1、在模版中使用 if else
逻辑判断符: gt >;lt <;eq =;elt <=;egt >=;neq !=;heq ===;
g:greater;l:less;eq:equal
<if condition = '$name eq 男 '> 男人是泥巴做的 <else /> //单标签 女人是水做的 </if>
<if condition = '$age lt 18'> 未成年 <elseif condition='$age eq 18' /> 青春年少 <else /> 成年 </if>
2、switch case
<switch name='number'> <case value='1'>1个</case> <case value='2'>2个</case>
<default/>这里是默认值
</switch>
三、循环结构
1、for
<for start='0' end='10'> {$i} </for>循环执行十次。
循环变量名 默认为 $i。
完整用法: <for start="开始值" end="结束值" step="步进值" name="循环变量名" comparison="lt"> </for> (comparison为判断条件。lt为正序,gt为逆序)
2、volist 数组遍历
//遍历一维数组
$arr=array("a1","b2","c3","d4"); $this->assign("list",$arr);
<volist name='list' id='v'> {$v}<br/> </volist>
a1
b2
c3
d4
//遍历二维数组
$arr[0]=array('id'=>1,'username'=>'ztz'); $arr[1]=array('id'=>2,'username'=>'ztz2'); $this->assign('list',$arr);
//每次取是一个数组,现在我只取username <volist ame='list' id='v'> {$v.username}<br/> <volist>
ztz
ztz2
3、foreach数组遍历 比volist简单
$arr=array('k1'=>'v1','k2'=>'v2','k3'=>'v3'); $this->assign('list',$arr);
<foreach name='list' item='v' key='k'> {$k}-->{$v}<br/> </foreach>
k1-->v1
k2-->v2
k3-->v3
使用foreach打印数据库内容(二维数组$arr):
$mytable=M('mytable'); $arr=$mytable>select(); $this->assign('list',$arr);
//使用表格形式打印出数据库内容
//v是取出的一个一维数组 <table> <foreach name='list' item='v'> <tr> <td>{$v.id}</td> <td>{$v.username}</td> <td>{$v.password}</td>
<if condition="$v.sex eq 1">
<td>男</td>
<else/>
<td>女</td>
</tr> </foreach> </table>
四、特殊标签
1、比较标签
eq lt gt ngt等
<eq name='n' value='10'>等于10<else/>不是10</eq>
2、范围标签
in 从某些值中挑选出一个
between 在某个范围内
<in name='n' value='1,2,3,4,5'> {$n}在1,2,3,4,5这些数里面 <else/>不在1,2,3,4,5这些数里面 </in>
<between name='n' value='1,10'> {$n}在1-10之间 <else/>不在1-10之间 </between>
3、Present标签
判断模版变量是否已经赋值。
<present name='n'>n有赋值<else/>n没有赋值</present>
4、Empty标签判断模版变量是否为空。
Define标签定义模版常量。
Assign标签对模版变量进行赋值。
五、其他标签
建议在配置文件中修改左右定界符,修改配置文件。防止与css js变量冲突
'TMPL_L_DELIN'->'<{',
'TMPL_R_DELIN'->'>}',