• 自定义TinkPhp模板标签


            常用thinkphp的朋友应该对他的模板标签很熟悉,如<volist>标签循环输出数据,先在控制器类抛出数据,再在模板文件中用volist循环渲染,那么我们如果不想在控制器写逻辑查询数据库,想直接在模板标签里查询呢,例如定义成<dlist table="article1" id="list"></dlist>这种,table代表要查询的表,下面我用一个小例子来给大家讲解一下。

            首先我的数据库有个article1表如下

            如果用ThinkPhp自带的volist标签,大概如下

            控制器里

    1. <?php
    2. namespace Cn\Controller;
    3. /**
    4. * Class IndexController
    5. * @package Cn\Controller
    6. */
    7. class IndexController extends BindController {
    8. /**
    9. * [listView description]
    10. * @return [type] [description]
    11. */
    12. public function listView(){
    13. $data=M("article1")->order("id asc")->select();
    14. $this->data=$data;
    15. $this->display();
    16. }
    17. }

             相应的模板文件里

    1. <volist name="data" id="article">
    2. <div>{$article.title}</div>
    3. </volist>

            然后访问浏览器可以看到数据已经展示出来了

            那么下面我们自定义一个dlist标签,很简单

            我们找到如下图位置的文件,Cx.class.php

     

            首先我们将dlist的标签名和属性添加到这个数组里,复制volist的根据自己需求相应的修改一下就行,如下图 

            然后找到_volist这个方法,如下图:

            然后把这个方法复制一份放到类的最后(以后修改的时候好找),然后把方法名改成自定义的标签如_dlist,然后把相应逻辑根据自己的需求添加到这个方法里,如下图

            其实这个方法的原理就是根据标签动态生成php语句然后执行,可以看到这个方法一直在拼接$parseStr这个字符串,这个字符串就是模板转化的php语句,我们添加功能就是在这里面拼接php语句就行,可以看到我在方法的开始把查表等逻辑拼接进去了,然后我们可以打印一下这个$parseStr语句,如下图:

            至此,大功告成,我们写个空的控制器然后在模板文件用<dlist>标签测试一番,首先写个空的方法,直接display()渲染模板,其他的啥也不干,如下

    1. <?php
    2. namespace Cn\Controller;
    3. /**
    4. * Class IndexController
    5. * @package Cn\Controller
    6. */
    7. class IndexController extends BindController {
    8. /**
    9. * [listView description]
    10. * @return [type] [description]
    11. */
    12. public function listView(){
    13. $this->display();
    14. }
    15. }

             然后是模板文件李,直接查询article1表里的所有数据,按id排序,如下

    1. <dlist table="article1" order="id asc" id="list">
    2. <div>{$list.title}</div>
    3. </dlist>

             然后访问网址可以看到数据已经渲染到页面了。

             好了,今天就先分享到这。

  • 相关阅读:
    HashMap 源码解析超详解
    C++中(封闭)类的定义及使用特性---知识要点篇1
    如何正确安装JDK,配置环境
    安装docker ,更换docker版本
    BGP选路的十一条原则(第八课)
    多测师肖sir_高级金牌讲师__接口测试之F12查看接口(2)
    349. 两个数组的交集
    线程创建及生命周期
    C++面向对象编程题 第22题
    【短文】Linux怎么读取文件大小
  • 原文地址:https://blog.csdn.net/sdxjwkq01/article/details/125634377