• 内置标签[2]


    一、遍历循环

    ThinkPHP 内置标签提供了 Volist 标签、Foreach 标签和 For 标签

     Home/controller/UserController.class.php 中插入一下代码

    1 class UserController extends Controller {
    2         public function index() {
    3             $user = M('User');            
    4             $this->assign('data',$user->select());
    5             $this->display();
    6         }    
    7 }

    Volist 标签:通常用于查询数据集的结果输出,通过 select()方法返回的是一个二
    维数组,可以直接使用 volist 标签进行输出。

    然后在 View/User/index.html 中的代码:

    1 <ul>
    2     <volist name="data" id="arr">
    3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    PS:这里的 name="data"中的 data 是控制器给模版定义的数据变量,要对应;这里
    id="arr"中的 arr 是将要遍历循环的数组名,可以自定义

    得到的结果为在浏览器中输出为:

    offset 从第几条开始,起始值 0,length 共多少条

    1 <ul>
    2     <volist name="data" id="arr" offset="2" length="10">
    3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    mod 求当前余数,当前 index 除以 2 余 1,输出偶数

    1 <ul>
    2     <volist name="data" id="arr" mod="2">
    3         <eq name="mod" value="1">
    4         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    5     </volist>
    6 </ul>

    因为数据库开始是从0开始,所以除以2余1的为偶数

    没有数据的情况下使用 empty 填充

    1 <ul>
    2     <volist name="data" id="arr" empty="没有任何数据">
    3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    empty 属性不支持 HTML 直接输入,但可以通过变量输出

    但可以在 Home/controller/UserController.class.php 中设定:

    1 class UserController extends Controller {
    2         public function index() {
    3             $user = M('User1');        
    4             $this->assign('empty','<span style="color:red">没有任何数据</span>');
    5             $this->assign('data',$user->select());
    6             $this->display();
    7         }    
    8 }

    然后在 View/User/index.html 中的代码为:

    1 <ul>
    2     <volist name="data" id="arr" empty="$empty">
    3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    注意这时的ematy的属性是从 Home/controller/UserController.class.php 中继承过来的 ,  empty="$empty" 。

    通过 key 输出循环遍历的变量

    1 <ul>
    2     <volist name="data" id="arr" key="k">
    3         <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    输出的结果为:

    没有指定 k,也可以用 i 变量输出

    1 <ul>
    2     <volist name="data" id="arr" >
    3         <li>{$i}--{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    结果和通过 key 输出循环遍历的变量的结果是一样的。

    key 变量,可以直接输出索引值,从 0 开始

    1 <ul>
    2     <volist name="data" id="arr" >
    3         <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </volist>
    5 </ul>

    Foreach 标签和 Volist 标签类似,只不过 Foreach 标签更加简单,没有额外属性。

    1 <ul>
    2     <foreach name="data" item="arr"  >
    3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </foreach>
    5 </ul>

    主要注意的是,这里是 item="arr" ,不再是 id="arr" 

    foreach只支持 key 属性,但{$key}变量支持,两个的结果是一样的

    支持{$key}变量

    1 <ul>
    2     <foreach name="data" item="arr"  >
    3         <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </foreach>
    5 </ul>

    支持key属性

    1 <ul>
    2     <foreach name="data" item="arr" key="k"  >
    3         <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li>
    4     </foreach>
    5 </ul>

    For标签就是简单的循环标签

    从 1 到 99 循环

    1 <for start="1" end="100">
    2     {$i}<br/>
    3 </for>

    这里不是1到100,而是1到99

    除了start和end必须值,还有三个可选值。comparison是大于还是小于,默认值为lt
    (<);name是循环变量名,默认值为i;step是步进值,默认为1。

    1 <for start="1" end="100" comparison="lt" step="3" name="b">
    2     {$b}<br/>
    3 </for>

    三.其他标签

    ThinkPHP 模版中还有一些其他标签。

    在模版中定义变量,value 值可以为变量($user)或系统变量($Think.get.user)

    1 <assign name="var" value="124" />
    2 {$var}

    这时输出结果为: 124 ;

     $Think.get.user 可以从url的最后中的user的值来获取,这个在原先讲过,这里就不赘述了。

    在模版中定义常量,value 值可以为变量($user)或系统变量($Think.get.user)

    1 <define name="MY_NAME" value="563" />
    2     {$Think.const.MY_NAME}

    这时输出结果为: 563 ,需要注意的是,这时候不能在输出的时候直接用 $MY_NAME ,直接用这个的话没有任何输出结果。

    import 导入标签可以智能的导入 js 和 css 文件

    常规引入方法,在 View/User/index.html 中的引入为:

    1 <html>
    2 <head></head>
    3 <script type="text/javascript" src="__PUBLIC__/js/index.js"></script>
    4 <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/index.css"/>
    5 <body>
    6 </body>
    7 </html>    

    这里的 __PUBLIC__ 就是主目录下的public文件夹,如下图:

    使用 import 导入,js 和 css 是目录

    1 <html>
    2 <head></head>
    3 <import type="js" file="js.index" />
    4 <import type="css" file="css.index" />
    5 <body>
    6 </body>
    7 </html>    

    file里的第一个js是public下的js文件夹,后面那个index是js文件的名字,不用带上js这个后缀名

    使用 import 导入,basepath 修改默认路径

    1 <html>
    2 <head></head>
    3 <import type="js" file="js.index" basepath="./Common" />
    4 <import type="css" file="css.index" basepath="./Common" />
    5 <body>
    6 </body>
    7 </html>    

    load 加载标签可以智能的加载 js 和 css 文件

    1 <html>
    2 <head></head>
    3 <load href="__PUBLIC__/js/index.js" />
    4 <load href="__PUBLIC__/css/index.css" />
    5 <body>
    6 </body>
    7 </html>    

    系统还提供了专用 js 和 css 标签,专门用于加载

    1 <html>
    2 <head></head>
    3 <js href="__PUBLIC__/js/index.js" />
    4 <css href="__PUBLIC__/css/index.css" />
    5 <body>
    6 </body>
    7 </html>    

    PHP 代码可以和标签在模版文件中混合使用,可以在模版文件里面书写任意的 PHP 语句代码。

    使用php标签:

     1 <html>
     2 <head></head>
     3 
     4 <body>
     5 
     6 <php>
     7 $a=1;
     8 $b=2;
     9 echo $c=$a+$b;
    10 </php>
    11 
    12 </body>
    13 </html>    

    使用php语法:

     1 <html>
     2 <head></head>
     3 
     4 <body>
     5 
     6 <?php
     7 $a=1;
     8 $b=2;
     9 echo $c=$a+$b;
    10 ?>
    11 
    12 </body>
    13 </html>    

    这两个输出的结果都是直接为“3”。

    如果想原样输出标签极其内容,可以使用 literal 标签

     1 <html>
     2 <head></head>
     3 
     4 <body>
     5 
     6 <literal>
     7     <php>echo 123;</php>
     8 </literal>
     9 
    10 </body>
    11 </html>    

    这时输出结果为: echo 123; 为什么没有连 <php></php> 一起输出呢?因为这里  <php></php> 是相当于标签来用的。

  • 相关阅读:
    python实现从生成器中取固定角标的元素
    python-高阶函数
    git学习手册
    python批量进行文件修改操作
    python第一站
    LoadRunner,一个简单的例子
    python3中urllib2的问题
    gitlab 随笔
    sed 删除文本
    sed 修改文本
  • 原文地址:https://www.cnblogs.com/jacson/p/4508912.html
Copyright © 2020-2023  润新知