模版引擎详解-兄弟连新版thinkphp 15、16、17、18

 第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'->'>}',

原文地址:https://www.cnblogs.com/wingjay/p/3894833.html