thinkphp分組下自定義標(biāo)簽庫實(shí)例

字號(hào):


    本文實(shí)例講述了thinkphp分組下自定義標(biāo)簽庫的實(shí)現(xiàn)方法。分享給大家供大家參考。具體如下:
    自定義標(biāo)簽庫應(yīng)該位于thinkphp\\extend\\driver\\taglib目錄下
    1 新建標(biāo)簽類庫文件名為taglibblog.class.php。
    2 編輯剛才新建的類庫文件,新建一個(gè)類,繼承taglib父類
    代碼如下:
    import('taglib');
    class taglibblog extends taglib {
    }
    3 在類中聲明一個(gè)protected成員變量$tags
    代碼如下:
    class taglibblog extends taglib {
    protected $tags =array(
    'mynav'=>array('attr'=>'limit,order','close'=>1)
    /* 這里$tags數(shù)組內(nèi),每個(gè)單元也就是每一行代表一個(gè)標(biāo)簽,例如{dede:article},我們這里也定義了一個(gè)mynav,
    然后每一行標(biāo)簽的鍵名就是標(biāo)簽名,鍵值是一個(gè)數(shù)組,該數(shù)組包含兩個(gè)單元,第一個(gè)就是attr,就是標(biāo)簽中得屬性,以逗號(hào)分隔,
    如num,typeid等等,close的值如果是0的話就是非閉合標(biāo)簽,1的話就是閉合,意思是要以</mynav>來結(jié)尾
    */
    );
    }
    4 定義了標(biāo)簽后,我們需要實(shí)現(xiàn)標(biāo)簽的功能,這里直接在類文件下聲明一個(gè)函數(shù),以_開頭,以標(biāo)簽名 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;
    }
    定義好標(biāo)簽后,需要在項(xiàng)目公用配置文件中加載標(biāo)簽庫
    config.php
    代碼如下:
    //加載標(biāo)簽庫
    'app_autoload_path'=>'@.taglib',
    'taglib_build_in'=>'cx,blog',
    標(biāo)簽庫完整源碼如下:
    <?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>
    希望本文所述對(duì)大家的thinkphp框架程序設(shè)計(jì)有所幫助。