zoukankan      html  css  js  c++  java
  • 模版引擎详解-兄弟连新版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'->'>}',

  • 相关阅读:
    Netty源码解析与实战
    什么是序列化id?
    关于idea下tomcat输出日志的问题
    利用jstack 找到异常代码
    mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept
    Spark-Hadoop、Hive、Spark 之间是什么关系?(转)
    转(数据分析的意义)
    按位取反~100=-101
    知识总汇
    前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
  • 原文地址:https://www.cnblogs.com/wingjay/p/3894833.html
Copyright © 2011-2022 走看看