牛骨文教育服务平台(让学习变的简单)
博文笔记

ThinkPHP3.2+版本如何自定义自己的标签

创建时间:2014-12-10 投稿人: 浏览次数:4140

在前台调用模板的时候,一般会将公用的部分(头部、左侧|右侧、底部)摘出来,单独作为一个文件来引入。这样会使代码更容易维护,但是由于每个文件都载入公共模板,就会需要在多个控制器里面分配同样的数据或者在公共模板里面写PHP代码来读取数据,虽然可以达到同样的功能,但是前者重复使用了代码,后者没有使HTML和PHP代码分离,与面向对象程序设计思想以及使用框架的初衷背道而驰。所以我们可以使用一种更优雅的方式来解决,那就是扩展标签库自定义自己的标签。

例如:网站导航栏是每个页面都需要加载的~ 我们可以在里面定义一个<nav></nav>标签来读取导航栏并且排序好~~这样既简化了代码又方便前端调用而且看着也舒服~如何自定义自己的标签,步骤如下:

1,首先在当前模块的Controller文件夹同级目录新建一个文件夹,名称是TagLib。

2,在TagLib里面新建一个PHP文件,如:TagLibMytags.class.php。需要注意的是:文件名前缀TagLib是必须的,Mytags是你的Tag名称。

3,TagLibMytags.class.php的内容如下:

<?php
/**自定义标签库文件
 */
namespace HomeTagLib;

use ThinkTemplateTagLib;

class TagLibSptag extends TagLib {
    protected $tags = array(
        "test" => array(
            "attr"  => "id, name",//attr 标签支持的属性列表,用逗号分隔
            "close" => 0//close 标签是否为闭合方式(0闭合 1不闭合),默认不闭合
        )
    );

    public function _test ($tag, $content) {
        $id = $tag["id"];
        $name = $tag["name"];
        $str = "";
        $str .= "<?php echo ".  $name .";?>";

        return $str;

    }
}

因为TP3.2之后的版本引入了命名空间,所以顶部必须带有命名空间

至于标签功能如何定义请参照TP手册。

4,在模板页面调用

<test id="1" name="我是标签名称"/>
输出:我是标签名称

5,最后就是处理配置项了,在配置文件中配置 

<?php
return array(
    "APP_AUTOLOAD_PATH" => "@.TagLib",
    "TAGLIB_BUILD_IN" => "Cx,HomeTagLibTagLibMytags"
);
其中@表示当前所在的模块,Cx是TP核心标签库(例如:经常在模板上用到的foreach、if)如果不加上的话它的标签就无法使用了。还需要注意一点的就是写自己的标签库的时候需要带全路径,要不然会提示实例化一个不存在的类!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。