<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之旅 廣告
                [TOC] ## 知識點 1、簡單介紹 2、準備工作 3、熱門文章 4、本站推薦 5、最新文章 ## PHP在定界符里用變量和常量 **在定界符里用變量注意點**: 如果變量前有\號 或者 變量是在定界符里面新聲明的,要在變量前多加一個\作轉義符 **在定界符里用常量**: 先在定界符外,將要用的常量賦值給變量,然后在定界符里面用變量即可 參考內容:https://blog.csdn.net/ltx06/article/details/79024669 ## 一、自定義標簽簡介 ### 1、我的理解 類似于通用函數,便于根據需要調用。如:調用某分類下的文章列表,只需要傳入分類ID即可,不需要每次都寫很多代碼。簡化代碼,使用方便。 與html標簽類似,只要添加數據,即可展示出來 分為:閉合標簽和非閉合標簽 ~~~ 閉合標簽:<article name="" /> 非閉合標簽:<article name="">....</article> ~~~ ### 2、官方理解 內置的模板引擎除了支持普通變量的輸出之外,更強大的地方在于標簽庫功能。 標簽庫類似于Java的Struts中的JSP標簽庫,每一個標簽庫是一個獨立的標簽庫文件,標簽庫中的每一個標簽完成某個功能,采用XML標簽方式(包括開放標簽和閉合標簽)。 標簽庫分為內置和擴展標簽庫,內置標簽庫是Cx標簽庫。 Cx標簽庫:\thinkphp\library\think\template\taglib\Cx.php ### 3、參考網址 標簽擴展(推薦) http://www.hmoore.net/manual/thinkphp5/185286 標簽庫 http://www.hmoore.net/manual/thinkphp5/125015 ThinkPHP自定義模板標簽詳解 http://www.thinkphp.cn/topic/6258.html thinkphp5 tablib標簽庫自定義 https://blog.csdn.net/panxiong91/article/details/52059089 自定義TagLib標簽庫 http://www.hmoore.net/thinkphp/thinkphp5-guide/115466 自定義標簽alert http://www.hmoore.net/w113211/killall/245642 Thinkphp5的自定義標簽 http://www.php.cn/php-weizijiaocheng-399626.html ### 4、代碼例子 模板標簽讓網站前臺開發更加快速和簡單,這讓本該由程序猿才能完成的工作,現在只要稍懂得HTM的人也能輕易做到,這也就是模板標簽的強大之處。 接觸過dedecms或者phpcms等內容管理系統的人都知道,cms的前臺都是使用模板標簽來調用數據,如列表,內容。 來看一個phpcms v9調用數據排行列表的標簽: ~~~ {pc:content action="hits" catid="6" num="10" order="views DESC"} {loop $data $r} <li><a href="{$r[url]}" title="{$r[title]}">{$r[title]}</a></li> {/loop} {/pc} ~~~ 說明: pc大括號的的參數形式是: {pc:content 參數名=”參數值” 參數名=”參數值” 參數名=”參數值”} action:本參數的值表示為操作事件,模型類PC標簽必須使用包含本參數,以說明要進行的操作。 catid:獲取頻道欄目的ID,和該欄目的數據 num:獲取記錄的條數,最后會被模板引擎處理成limit傳送到處理函數中。 order:表示數據列表的排序方式 上面那段phpcms模板模簽的功能就是獲取ID等于6的欄目的10條數據,然后按照點擊量排序。 不過上面的因為PHPCMS V9已經是一個成熟的CMS,它的模板標簽是已經定義好的了,如"pc","num"等標簽, 我們只能通過閱讀PHPCMS V9的使用文檔來學習如何調用,而不可以更改它的名稱, 而ThinkPHP只是一個框架,每個開發者都可以通過自定義模板標簽來簡化數據的調用方式。 ## 二、準備工作 ### 1、新建taglib文件夾 位置:前臺index模塊下 application\index\taglib ### 2、新建article.php 位置:taglib文件夾下 application\index\taglib\Article.php 這個文件與熱門文章調用有關 ### 3、編寫Article.php ~~~ <?php namespace app\index\taglib; use think\template\TagLib; /** * 自定義標簽 文章相關 */ class Article extends TagLib{ // $tags 標簽的具體名稱 // 標簽定義 attr 屬性列表 close 是否閉合(0 或者1 默認1) alias 標簽別名 level 嵌套層次 // <a href=""></a>(閉合標簽) protected $tags = [ 'hot' => ['attr' => 'catid', 'close' => 0], //1非閉合標簽(默認1) ,0閉合 ]; // 每個標簽對應一個函數,函數返回html代碼 // hot標簽解析 public function tagHot($tag) { return '自定義標簽'; } } ?> ~~~ 備注:具體方法見(四、熱門文章) ### 4、調用自定義標簽 用這個標簽:{Article:hot catid="0" /} 替換以下代碼: ~~~ <aside class="widget widget_hot_post"> <h3 class="widget-title"><i class="fa-bars fa"></i>熱門文章</h3> <div id="hot_post_widget"> <ul> {volist name="article_hot" id="vo"} <li><span class="li-icon li-icon-{$key+1}">{$key+1}</span><a href="#">{$vo.title}</a></li> {/volist} </ul> </div> </aside> ~~~ 這就叫自定義標簽,怎么樣,是不是簡單了很多,對吧?! ### 5、加載自定義標簽 如果不是內置標簽庫,需要在配置文件中修改。 位置:\application\config.php ~~~ // +---------------------------------------------------------------------- // | 模板設置 // +---------------------------------------------------------------------- 'template' => [ // 模板引擎類型 支持 php think 支持擴展 'type' => 'Think', // 模板路徑 'view_path' => '', // 模板后綴 'view_suffix' => 'html', // 模板文件名分隔符 'view_depr' => DS, // 模板引擎普通標簽開始標記 'tpl_begin' => '{', // 模板引擎普通標簽結束標記 'tpl_end' => '}', // 標簽庫標簽開始標記 'taglib_begin' => '{', // 標簽庫標簽結束標記 'taglib_end' => '}', 'taglib_pre_load' => 'app\index\taglib\Article', ], ~~~ ### 6、官方例子 網址參考:http://www.hmoore.net/manual/thinkphp5/185286 ~~~ /** * 這是一個非閉合標簽的簡單演示 */ public function tagOpen($tag, $content) { $type = empty($tag['type']) ? 0 : 1; // 這個type目的是為了區分類型,一般來源是數據庫 $name = $tag['name']; // name是必填項,這里不做判斷了 $parse = '<?php '; $parse .= '$test_arr=[[1,3,5,7,9],[2,4,6,8,10]];'; // 這里是模擬數據 $parse .= '$__LIST__ = $test_arr[' . $type . '];'; $parse .= ' ?>'; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ 非閉合標簽模板調用 ~~~ {Article:open name='my' type='1'} {$key}=>{$my}<br> {/Article:open} ~~~ 編譯解析代碼: ~~~ <?php $test_arr=[[1,3,5,7,9],[2,4,6,8,10]]; $__LIST__ = $test_arr[1]; if(is_array($__LIST__) || $__LIST__ instanceof \think\Collection || $__LIST__ instanceof \think\Paginator): $i = 0; $__LIST__ = $__LIST__; if( count($__LIST__)==0 ) : echo "" ; else: foreach($__LIST__ as $key=>$my): $mod = ($i % 2 ); ++$i; ?> <?php echo $key; ?> => <?php echo $my; ?> <br> <?php endforeach; endif; else: echo "" ;endif; ?> ~~~ 閉合標簽例子: ~~~ /** * 這是一個閉合標簽的簡單演示 */ public function tagClose($tag) { $format = empty($tag['format']) ? 'Y-m-d H:i:s' : $tag['format']; $time = empty($tag['time']) ? time() : $tag['time']; $parse = '<?php '; $parse .= 'echo date("' . $format . '",' . $time . ');'; $parse .= ' ?>'; return $parse; } ~~~ **閉合標簽模板調用:**{Article:close time="" format=""} **解析成下面的代碼:** <?php echo date("Y-m-d H:i:s",1533212790); ?> 備注:自定義標簽可以拼接動態代碼、其它內置的標簽,還可以拼接html代碼 ## 三、熱門文章 ### (一)原代碼 #### 1、控制器 ~~~ $article_hot = Db::name('article')->field('id,title')->limit(8)->order('views desc')->select(); $this->assign('article_hot',$article_hot); ~~~ #### 2、模板 ~~~ <aside class="widget widget_hot_post"> <h3 class="widget-title"><i class="fa-bars fa"></i>熱門文章</h3> <div id="hot_post_widget"> <ul> {volist name="article_hot" id="vo"} <li><span class="li-icon li-icon-{$key+1}">{$key+1}</span><a href="#">{$vo.title}</a></li> {/volist} </ul> </div> </aside> ~~~ ### (二)自定義標簽代碼 #### 1、標簽定義 ~~~ protected $tags = [ 'hot' => ['attr' => 'catid','close' => 0], // 0閉合標簽 ,1不閉合(默認) 'close' => ['attr' => 'time,format', 'close' => 0], // 閉合標簽 'open' => ['attr' => 'name,type', 'close' => 1], // 非閉合標簽 ]; ~~~ #### 2、標簽解析 ~~~ public function tagHot($tag) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = ''; }else{ $where = "catid=" . $tag['catid']; } $php = <<<php <?php \$article_hot = think\Db::name('article')->where("$where")->field('id,title')->limit(8)->order('views desc')->select(); \$__LIST__ = \$article_hot; ?> php; $parse ='<aside class="widget widget_hot_post">'; $parse .='<h3 class="widget-title"><i class="fa-bars fa"></i>熱門文章</h3>'; $parse .='<div id="hot_post_widget">'; $parse .='<ul>'; $parse .=$php; $parse .='{volist name="__LIST__" id="vo"}'; $parse .='<li><span class="li-icon li-icon-{$key+1}">{$key+1}</span><a href="#">{$vo.title}</a></li>'; $parse .='{/volist}'; $parse .='</ul>'; $parse .='</div>'; $parse .='</aside>'; return $parse; } ~~~ #### 3、模板調用 > {Article:hot catid="0" /} ## 四、本站推薦 ### (一)原代碼 #### 1、控制器 ~~~ $article_recommend = Db::name('article')->where('recommend',1)->field('id,title,thumb,views')->limit(3)->order('listorder desc')->select(); $this->assign('article_recommend',$article_recommend); ~~~ #### 2、模板 ~~~ <aside class="widget widget_hot_commend"> <h3 class="widget-title"><i class="fa-bars fa"></i>本站推薦</h3> <div id="hot" class="hot_commend"> <ul> {volist name="article_recommend" id="vo"} <li> <figure class="thumbnail"><a href="#"><img src="__UPLOADS__/image/{$vo.thumb}" alt="{$vo.title}"></a></figure> <div class="hot-title"><a href="#">{$vo.title}</a></div> <div class="views">閱讀 {$vo.views}</div> <i class="fa-thumbs-o-up fa"> 0</i> </li> {/volist} </ul> <div class="clear"></div> </div> </aside> ~~~ ### (二)自定義標簽代碼 #### 1、標簽定義 ~~~ protected $tags = [ 'hot' => ['attr' => 'catid','close' => 0], 'recommend' => ['attr' => 'catid', 'close' => 0], ]; ~~~ #### 2、標簽解析 ~~~ public function tagRecommend($tag) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = 'recommend=1'; }else{ $where = "recommend=1 and catid=" . $tag['catid']; } $php = <<<php <?php \$article_recommend = think\Db::name('article')->where("$where")->field('id,title,thumb,views')->limit(3)->order('listorder desc')->select(); \$__LIST__ = \$article_recommend; ?> php; $parse = '<aside class="widget widget_hot_commend">'; $parse .= '<h3 class="widget-title"><i class="fa-bars fa"></i>本站推薦</h3>'; $parse .= '<div id="hot" class="hot_commend">'; $parse .= '<ul>'; $parse .= $php; $parse .= '{volist name="__LIST__" id="vo"}'; $parse .= '<li>'; $parse .= '<figure class="thumbnail"><a href="#"><img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></a></figure>'; $parse .= '<div class="hot-title"><a href="#">{$vo.title}</a></div>'; $parse .= '<div class="views">閱讀 {$vo.views}</div>'; $parse .= '<i class="fa-thumbs-o-up fa"> 0</i>'; $parse .= '</li>'; $parse .= '{/volist}'; $parse .= '</ul>'; $parse .= '<div class="clear"></div>'; $parse .= '</div>'; $parse .= '</aside>'; return $parse; } ~~~ #### 3、模板調用 >{Article:recommend catid="0" /} ## 五、最新文章 ### (一)原代碼 #### 1、控制器 ~~~ $article = Db::name('article')->field('id,catid,title,thumb,description,inputtime,views')->limit(2)->order('listorder desc')->select(); $this->assign('article',$article); ~~~ #### 2、模板 ~~~ {volist name="article" id="vo"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/image/{$vo.thumb}" alt=""></a> <span class="cat"> <a href="#">{$vo.catid|getCatInfoById=catname}</a></span> </figure> <header class="entry-header"> <h2 class="entry-title"><a href="#" rel="bookmark">{$vo.title}</a></h2> </header> <div class="entry-content"> <div class="archive-content">{$vo.description}</div> <br/> <span class="title-l"></span> <span class="entry-meta"> <span class="date">{$vo.inputtime}&nbsp;</span> <span class="views"> 閱讀 {$vo.views}&nbsp;</span> <span class="comment"><a href="#"> <i class="fa fa-comment-o"></i> 查看評論</a></span> </span> <div class="clear"></div> </div> <span class="entry-more"> <a href="#" rel="bookmark">閱讀全文</a></span> </article> {/volist} ~~~ ### (二)自定義標簽代碼 #### 1、標簽定義 ~~~ protected $tags = [ 'hot' => ['attr' => 'catid', 'close' => 0], //0閉合標簽 ,1不閉合(默認) 'recommend' => ['attr' => 'catid', 'close' => 0], 'list' => ['attr' => 'catid,num', 'close' => 0], ]; ~~~ #### 2、標簽解析 ~~~ public function tagList($tag) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = ''; $num = $tag['num']; }else{ $where = "catid=" . $tag['catid']; } $php = <<<php <?php \$article_list = think\Db::name('article')->where("$where")->field('id,catid,title,thumb,description,inputtime,views')->limit("$num")->order('listorder desc')->select(); \$__LIST__ = \$article_list; ?> php; $parse = $php; $parse .= '{volist name="__LIST__" id="vo"}'; $parse .= '<article class="post type-post status-publish format-standard hentry">'; $parse .= ' <figure class="thumbnail">'; $parse .= ' <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></a>'; $parse .= ' <span class="cat"> <a href="#">{$vo.catid|getCatInfoById=catname}</a></span>'; $parse .= ' </figure>'; $parse .= ' <header class="entry-header">'; $parse .= ' <h2 class="entry-title"><a href="#" rel="bookmark">{$vo.title}</a></h2>'; $parse .= ' </header>'; $parse .= ' <div class="entry-content">'; $parse .= ' <div class="archive-content">{$vo.description}</div>'; $parse .= ' <br/>'; $parse .= ' <span class="title-l"></span>'; $parse .= ' <span class="entry-meta">'; $parse .= ' <span class="date">{$vo.inputtime}&nbsp;</span>'; $parse .= ' <span class="views"> 閱讀 {$vo.views}&nbsp;</span>'; $parse .= ' <span class="comment"><a href="#"> <i class="fa fa-comment-o"></i> 查看評論</a></span>'; $parse .= ' </span>'; $parse .= ' <div class="clear"></div>'; $parse .= ' </div>'; $parse .= ' <span class="entry-more"> <a href="#" rel="bookmark">閱讀全文</a></span>'; $parse .= '</article>'; $parse .= '{/volist}'; return $parse; } ~~~ #### 3、模板調用 > {Article:list catid="0" num="3" /}
                  <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>

                              哎呀哎呀视频在线观看