<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 標簽庫驅動 [上一頁](# "上一頁")[下一頁](# "下一頁") 任何一個模板引擎的功能都不可能是為你量身定制的,具有一個良好的可擴展機制也是模板引擎的另外一個考量,Smarty采用的是插件方法來實現擴展,Think\Template由于采用了標簽庫技術,比Smarty提供了更為強大的定制功能,和Java的TagLibs一樣可以支持自定義標簽庫和標簽,每個標簽都有獨立的解析方法,所以可以根據標簽庫的定義規則來增加和修改標簽解析規則。 在Think\Template中標簽庫的體現是采用XML命名空間的方式。每個標簽庫對應一個標簽庫驅動類,每個驅動類負責對標簽庫中的所有標簽的解析。 標簽庫驅動類的作用其實就是把某個標簽定義解析成為有效的模版文件(可以包括PHP語句或者HTML標簽),標簽庫驅動的命名空間位于 `Think\Template\TagLib`,標簽庫驅動必須繼承`Think\Template\TagLib`類,例如: ~~~ namespace Think\Template\Taglib; use Think\Template\TagLib; Class Test extends TagLib{ } ~~~ 首先需要定義標簽庫的標簽定義,標簽定義包含了所有標簽庫中支持的所有標簽,定義方式如下: ~~~ protected $tags = array( // 定義標簽 'input' => array('attr'=>'type,name,id,value','close'=>0), // input標簽 'textarea' => array('attr'=>'name,id'), ); ~~~ 標簽庫的所有支持標簽都在tags屬性中進行定義,tags屬性是一個二維數組,每個元素就是一個標簽定義,索引名就是標簽名,采用小寫定義,調用的時候不區分大小寫。 每個標簽定義支持的屬性包括: | 屬性名 | 說明 | |-----|-----| | attr | 標簽支持的屬性列表,用逗號分隔 | | close | 標簽是否為閉合方式 (0閉合 1不閉合),默認為不閉合 | | level | 標簽的嵌套層次(只有不閉合的標簽才有嵌套層次) | | alias | 標簽別名 | 定義了標簽屬性后,就需要定義每個標簽的解析方法了,每個標簽的解析方法在定義的時候需要添加“_”前綴,傳入兩個參數,對應屬性數組和內容字符串(針對非閉合標簽)。必須返回標簽的字符串解析輸出,在標簽解析類中可以調用模板類的實例。下面是一個**input**解析方法的定義: ~~~ // input標簽解析 public function _input($tag,$content) { $name = $tag['name']; $id = $tag['id']; $type = $tag['type']; $value = $this->autoBuildVar($tag['value']); $str = "<input type='".$type."' id='".$id."' name='".$name."' value='".$value."' />"; return $str; } // textarea標簽解析 public function _textarea($tag,$content) { $name = $tag['name']; $id = $tag['id']; $str = '<textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea>'; return $str; } ~~~ 定義好標簽庫擴展之后,我們就可以在模板中使用了,首先我們必須要告訴模板申明Test標簽庫,用taglib標簽,例如: ~~~ <taglib name='Test' /> ~~~ name屬性支持申明多個標簽庫,用逗號分隔即可。申明Test標簽庫之后,就可以使用Test標簽庫中的所有標簽庫了,調用方式如下: ~~~ <test:input type='radio' id='test' name='mail' value='value' /> <test:textarea id="content" name="content">$value</test:textarea> ~~~ > 注意:調用擴展標簽庫的標簽的時候,必須加上標簽庫的XML命名空間前綴。 Input標簽定義value屬性可以支持變量傳入,所以value被認為是一個變量名,如果在控制器中已經給value模板變量賦值,例如: ~~~ $this->assign('value','my test value'); ~~~ 最后標簽被模板引擎編譯后,就會輸出: ~~~ <input type='radio' id='test' name='mail' value='my test value' /> <textarea id="content" name="content">my test vale</textarea> ~~~ [上一頁](# "上一頁")[下一頁](# "下一頁")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看