thinkphp分組下自定義標簽庫實例

字號:


    本文實例講述了thinkphp分組下自定義標簽庫的實現(xiàn)方法。分享給大家供大家參考。具體如下:
    自定義標簽庫應該位于thinkphp\\extend\\driver\\taglib目錄下
    1 新建標簽類庫文件名為taglibblog.class.php。
    2 編輯剛才新建的類庫文件,新建一個類,繼承taglib父類
    代碼如下:
    import('taglib');
    class taglibblog extends taglib {
    }
    3 在類中聲明一個protected成員變量$tags
    代碼如下:
    class taglibblog extends taglib {
    protected $tags =array(
    'mynav'=>array('attr'=>'limit,order','close'=>1)
    /* 這里$tags數(shù)組內(nèi),每個單元也就是每一行代表一個標簽,例如{dede:article},我們這里也定義了一個mynav,
    然后每一行標簽的鍵名就是標簽名,鍵值是一個數(shù)組,該數(shù)組包含兩個單元,第一個就是attr,就是標簽中得屬性,以逗號分隔,
    如num,typeid等等,close的值如果是0的話就是非閉合標簽,1的話就是閉合,意思是要以</mynav>來結(jié)尾
    */
    );
    }
    4 定義了標簽后,我們需要實現(xiàn)標簽的功能,這里直接在類文件下聲明一個函數(shù),以_開頭,以標簽名 mynav結(jié)尾的函數(shù)名
    代碼如下:
    public function _mynav($attr,$content){
    $attr=$this->parsexmlattr($attr);
    import();
    $categories=m('category')->limit($attr['limit'])->order($attr['order'])->select();
    $categories=tool::formatmultiarray($categories);
    $str='';
    for($i=0;$i<count($categories);$i++){
    $model=array(
    '/[field.id]/',
    '/[field.name]/'
    );
    $replace=array(
    $categories[$i]['id'],
    $categories[$i]['name']
    );
    $str.=preg_replace($model,$replace,$content);
    }
    return $str;
    }
    定義好標簽后,需要在項目公用配置文件中加載標簽庫
    config.php
    代碼如下:
    //加載標簽庫
    'app_autoload_path'=>'@.taglib',
    'taglib_build_in'=>'cx,blog',
    標簽庫完整源碼如下:
    <?php
    import('taglib');
    class taglibblog extends taglib {
    protected $tags=array(
    'mynav'=>array('attr'=>'limit,order','close'=>1)
    );
    public function _mynav($attr,$content){
    $attr=$this->parsexmlattr($attr);
    import();
    $categories=m('category')->limit($attr['limit'])->order($attr['order'])->select();
    $categories=tool::formatmultiarray($categories);
    $str='';
    for($i=0;$i<count($categories);$i++){
    $model=array(
    '/[field.id]/',
    '/[field.name]/'
    );
    $replace=array(
    $categories[$i]['id'],
    $categories[$i]['name']
    );
    $str.=preg_replace($model,$replace,$content);
    }
    return $str;
    }
    }
    ?>
    模板中測試:
    代碼如下:
    <mynav limit=0,10 order=sort asc>
    <a href=[field.id]>[field.name]</a><br/>
    </mynav>
    希望本文所述對大家的thinkphp框架程序設計有所幫助。