wordpress CMS主题 微信
Home > PHP开发 > 在开发ThinkPHP网站程序时,如何自定义ThinkPHP标签库?

在开发ThinkPHP网站程序时,如何自定义ThinkPHP标签库?

高时银博客 PHP开发 点击: 428 次 0 1

在通过thinkphp开发个人网站程序时,一般情况下,thinkphp自带的标签就基本上够用了。但有时,为了让前台模板制作者更加方便快速地开发网站模板,作为网站程序开发者,有必要提供一些更加人性化的标签用来使用,这样就需要为thinkphp网站程序引用自定义标签库。那么,如何自定义thinkphp标签库呢?

第一:了解thinkphp自带标签库。

thinkphp自带标签库在 \Library\Think\Template\TagLib 文件夹,这个文件夹下有2个文件:Cx.class.php 和 Html.class.php。这里Cx.class.php是内置标签库,里面存放了模板上直接就可以使用的所有标签。Html.class.php是扩展标签库,可以在模板中调用,但是要“先在模板文件中导入这个标签库”或者“在配置文件中预加载这个标签库”。

第二:导入 或 预加载 扩展标签库。

导入标签库:使用taglib标签导入当前模板中需要使用的标签库,例如:

<taglib name="html,article" />

标签库预加载:通常用于某个标签库需要被大多数模板使用的情况。在配置文件中添加:

'TAGLIB_PRE_LOAD' => 'article,html'(预加载后,就不需要在模板中导入了)

导入或预加载标签库后,就可以使用标签库中定义的标签了,假设article标签库中定义了read标签:

<article:read name="hello" id="data" >
{$data.id}:{$data.title}
</article:read>

跟内置标签使用一样,只是要在标签前要添加“标签库名”。

第三:把扩展标签库引用为内置标签库。

扩展标签库的标签使用起来,总是要在标签前添加 标签库名,有点烦的话,可以把扩展标签库直接引用为内置标签库。如果扩展标签库文件Blog.class.php在可以在 \Library\Think\Template\TagLib 文件夹里,可在在配置文件中这样配置:

'TAGLIB_BUILD_IN'    =>    'cx,Blog',//必把所有内置标签库都写上

如果扩展标签库文件Blog.class.php在其它文件夹下,如在项目控制器里,可在配置文件中这样配置:

'TAGLIB_BUILD_IN'    =>    'cx,Admin\Controller\Blog',

如果是在项目控制器里,还要在这个Blog.class.php文件的头部的命名空间修改成这个文件所在的位置,如:

// 添加自定义 内置标签库
namespace Admin\Controller;
use Think\Template\TagLib;

第四:自定义内置标签。

自定义内置标签的标签名,不能跟thinkphp内置标签相同,否则会出现冲突。这点,请参照一下thinkphp手册中的内置标签。自定义内置标签,我们可以直接拿thinkphp自带的扩展标签库Html.class.php作为样本。下面提供1个范本:

<?php
// 添加自定义 内置标签库
namespace Admin\Controller;
use Think\Template\TagLib;

/**
* Blog标签库驱动
*/
class Blog extends TagLib{
// 标签定义
protected $tags = array(
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1)
'ylinks' => array('attr'=>'orderby,limit','close'=>0),
);

/*
*友情链接
*$tag 标签属性数组 包含:orderby,limit 顺序,数量
*前台调用:{ylinks limit="6"/}
*/
function _ylinks($tag){
//连接数据库
$mysql = $this->data_link();
$ylink = new \Admin\Model\YlinkModel('Ylink','',$mysql);

$orderby = !empty($tag["orderby"]) ? $tag["orderby"] : "sort";
$limit = !empty($tag["limit"]) ? $tag["limit"] : "";
$link = $ylink->order($orderby." desc")->limit($limit)->select();

foreach($link as $vo){
$links .='<li><a href="'.$vo["ylink_url"].'">'.$vo["ylink_name"].'</a></li>';
}
return $links;
}
}

也就2步:1、标签定义,即自定义标签有哪些属性;2、这标签添加方法功能,即这些标签起什么作用。上面这个例子是一个友情链接标签,它有2个属性:排列顺序和显示数量,它的方法功能实现函数是_ylinks,方法名跟标签名是一样的的,只是在标签名前加一个下划线。然后,在这个方法体内添加你想要实现的功能代码。上面这个友情链接调用,我们只需要在模板中 添加 {ylinks limit="6"/} 这样一句代码,就可以调用 6个友情链接了。

细心的朋友可以看出,上面的_ylinks方法体中我们添加了“连接数据库”代码,因为这个方法要调用数据库的数据库,所以要“连接数据库”。如果不调用数据库数据,就不需要连接数据库。如thinkphp自带的标签库就没有调用数据库。

 


文章作者:高时银博客
本文地址:http://wanlimm.com/77201609105161.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

目前还没有评论。赶快来坐沙发吧。

发表评论