ThinkPHP自定义标签的使用总结

                        ## **ThinkPHP自定义标签的使用总结** ##
  • 打开TagLib**.class.php文件,定义好类库类名并继承TagLib基类。
  • 只有类库没有标签是没有意义的,接下来就是制作标签
  • 例一:
<?php 
    class TagLibMy extends TagLib{
        protected $tags = array(
            "logo"=>array("attr"=>"id,size",'close'=>0),
        );
    }
?>  
  • 这样,就定义好了一个名为logo的标签,里面有id,size等属性,close为0代表是闭合标签,1为不闭合。
  • 接下来,就要定义标签的处理方法。该方法需要使用parseXmlAttr将数组解析成XML数据,如以下代码所示:
 public function _logo($attr,$content){
            $attr = $this->parseXmlAttr($attr);
            //$tag = $this->parseXmlAttr($attr, 'logo');两种方式都可以

            $id = !empty($tag['id']) ? $tag['id']: '_logo';
            $size = $tag['size'];
            switch ($size){
                case "big":
                    $str='<img name="logo" src="./Public/images/logo_big,jpg" 
                 width="200" height="140" alt="网站大logo">';
                    break;
                case "small":
                    $str='<img name="logo" src="./Public/images/logo_small,jpg"
                 width="100" height="70" alt="网站小logo">';
                    break;
                defalut:
                    $str="size参数有:big、small";
            }
            return $str;
        }
  • 如上述代码所示,标签的处理方法命名规则为”_标签名”,这是系统规范。接下来,就是在模板中使用了
<my:logo id ="index_logo" size="big">
  • 例二:
<?php
    /**
     * 自定义标签库
     */
    Class TagLibHd extends Taglib{

        protected $tags = array(
            'nav' => array('attr'=>'order'),
            'hot' => array('attr'=>'limit'),
        ); 
        public function _nav($attr,$content){
            $attr = $this->parseXmlAttr($attr);
            $str = <<<str
<?php
    \$_nav_cate = M('cate')->order("{$attr['order']}")->select();
        import('Class.Category',APP_PATH);
        \$_nav_cate = Category::unlimitedForlayer(\$_nav_cate);
        foreach(\$_nav_cate as \$_nav_cate_v):
           extract(\$_nav_cate_v);
           \$url = U('/c_'.\$id);

?>
str;
            $str .= $content;
            $str .= '<?php endforeach ?>';
            return $str;
        }

        public function _hot($attr,$content){
            $attr = $this->parseXmlAttr($attr);
            $limit = $attr['limit'];
            $str ='<?php ';
            $str.='$fields = array("id","title","click");';
            $str.='$_hot_blog = M("blog")->field($fields)->limit(
                   '.$limit.')->order("click desc")->select();';
            $str.='foreach($_hot_blog as $_hot_blog_value):';
            $str.='extract($_hot_blog_value);';
            $str.='$url = U("/".$id);?>';
            $str.=$content;
            $str.='<?php endforeach?>';
                return $str;
        }
    }
?>
<nav order='sort'>
                <li class='nav-lv1-li'>
                    <a href="{$url}" class='top-cate'>{$name}</a>
                    <ul>
                        <foreach name='child' item='v'>
                            <li><a href="{:U('/c_'.$v['id'])}">{$v.name}</a></li>
                        </foreach>
                    </ul>
                </li>
            </nav>
  • 标签处理方法中的参数$attr,$content都不能省略。
  • 例二和例一中不同的是例二的标签处理方法 _nav 中里面有php代码段,代码段中的必须在变量前加”\”,不然会出错。

  • 以上两个例子均引用自他人,第一个引用自《PHP MVC 开发实战》李开涌编著,第二个引用自后盾网黄永成老师的教程视频。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值