• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > PHP开发 > 在开发ThinkPHP网站程序时,如何自定义ThinkPHP标签库?

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

    作者: 分类:PHP开发 点击: 2,301 次
    wordpress CMS主题:ssmay主题

      在通过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自带的标签库就没有调用数据库。

       



      QQ二维码

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

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.