自定义TinkPhp模板标签

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

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

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

        控制器里

<?php
namespace Cn\Controller;
/**
 * Class IndexController
 * @package Cn\Controller
 */
class IndexController extends BindController {
	/**
	 * [listView description]
	 * @return [type] [description]
	 */
	public function listView(){
		$data=M("article1")->order("id asc")->select();
		$this->data=$data;
		$this->display();
	}
}

         相应的模板文件里


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

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

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

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

 

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

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

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

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

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

<?php
namespace Cn\Controller;
/**
 * Class IndexController
 * @package Cn\Controller
 */
class IndexController extends BindController {
	/**
	 * [listView description]
	 * @return [type] [description]
	 */
	public function listView(){
		$this->display();
	}
}

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值