<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 知識點: 1、改進思路 2、改菜單(非閉合標簽) 3、改右側本站推薦 4、自定義標簽緩存設計 5、改進熱門文章 6、首頁最新文章 7、分類頁文章列表 [TOC] ## 一、改進思路 自定義標簽:就是整合PHP、html代碼,方便調用 重新布局模板,不同模板可以隨意切換,自定義標簽也需要更換。 自定義標簽僅僅取的是數據,模板代碼不放在標簽里,這樣可以適合不同的模板。 那么這個,就要用非閉合標簽了 之前用閉合標簽,適合模板只有一套,調用比較簡單;如果有多套模板就,閉合標簽就行不通了 兩種方法都要掌握,具體要看用在什么地方和什么時候 比如單頁制作的時候,就可以用閉合標簽 ## 二、改菜單(非閉合標簽) ### 1、刪除Common.php 將初始化代碼放到自定義標簽中去 位置:\application\index\controller\Common.php index.php繼承Controller build.php去掉common控制器 ### 2、菜單標簽定義 屬性name ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num', 'close' => 0], 'recommend' => ['attr' => 'catid,num', 'close' => 0], 'list' => ['attr' => 'catid,num', 'close' => 0], ]; ~~~ ### 3、菜單標簽申明 兩個參數:$tag(標簽定義屬性)、$content(標簽解析內容) ~~~ public function tagMenu($tag, $content) { $php = <<<php <?php if(!cache('menu')) { \$categoryArray = think\Db::name('category')->order('listorder')->select(); cache('menu',app\admin\model\Menu::tree(\$categoryArray)); } \$__LIST__ = cache('menu'); ?> php; $name = $tag['name']; $parse = $php; $parse .= '{volist name"__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ 注意:轉義字符運用和緩存機制運用 ### 4、緩存機制 修改配置文件 \application\config.php ~~~ // +---------------------------------------------------------------------- // | 緩存設置 // +---------------------------------------------------------------------- 'cache' => [ // 驅動方式 'type' => 'File', // 緩存保存目錄 'path' => CACHE_PATH, // 緩存前綴 'prefix' => '', // 緩存有效期 0表示永久緩存 'expire' => 3600, // 3600表示一個小時 ], if(!cache('menu')) { \$categoryArray = think\Db::name('category')->order('listorder')->select(); cache('menu',app\admin\model\Menu::tree(\$categoryArray)); \$__LIST__ = cache('menu'); }else{ \$__LIST__ = cache('menu'); } ~~~ 簡化成 ~~~ if(!cache('menu')) { \$categoryArray = think\Db::name('category')->order('listorder')->select(); cache('menu',app\admin\model\Menu::tree(\$categoryArray)); } \$__LIST__ = cache('menu'); ~~~ 少寫一行數據 ### 5、模板調用自定義標簽 格式:{article:menu name="vo"}……{/article:menu} ~~~ <ul class="down-menu nav-menu"> <li class="current-menu-item"><a rel="nofollow" href="/"><i class="fa fa-home"></i> 首頁</a></li> {article:menu name="vo"} <li> <a href="javascript:(0)"> {$vo.catname}</a> <ul class="sub-menu"> {volist name="vo.son" id="voson"} <li><a href="{:url('category',['id'=>$voson.id])}"> {$voson.catname}</a></li> {/volist} </ul> </li> {/article:menu} </ul> ~~~ ## 三、改右側本站推薦 ### (一)標簽定義 ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num', 'close' => 0], 'recommend' => ['attr' => 'catid,num,name', 'close' => 1], 'list' => ['attr' => 'catid,num', 'close' => 0], ]; ~~~ ### (二)標簽申明 ~~~ public function tagRecommend($tag, $content) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = 'recommend=1'; }else{ $where = "recommend=1 and catid=" . $tag['catid']; } if(empty($tag['num']) || $tag['num']=='0'){ $num = 3; }else{ $num = $tag['num']; } $php = <<<php <?php \$article_recommend = think\Db::name('article')->where("$where")->field('id,title,thumb,views')->limit('$num')->order('listorder desc')->select(); \$__LIST__ = \$article_recommend; ?> php; $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ 原標簽申明 標簽解析:本站推薦512 ~~~ public function tagRecommend512($tag) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = 'recommend=1'; }else{ $where = "recommend=1 and catid=" . $tag['catid']; } if(empty($tag['num']) || $tag['num']=='0'){ $num = 3; }else{ $num = $tag['num']; } $php = <<<php <?php \$article_recommend = think\Db::name('article')->where("$where")->field('id,title,thumb,views')->limit('$num')->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__/image/{$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; } ~~~ 原標簽調用:{Article:tagRecommend512 catid="$id" num="10" /} ### (三)標簽調用 ~~~ <aside class="widget widget_hot_commend"> <h3 class="widget-title"><i class="fa-bars fa"></i>本站推薦</h3> <div id="hot" class="hot_commend"> <ul> {article:recommend name="vo" catid="0" num="3" /} <li> <figure class="thumbnail"><a href="#"><img src="__UPLOADS__/{$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> {/article:recommend} </ul> <div class="clear"></div> </div> </aside> ~~~ ## 四、自定義標簽緩存設計 ### (一)判斷添加緩存 ~~~ if(!cache('menu')) { \$categoryArray = think\Db::name('category')->order('listorder')->select(); cache('menu',app\admin\model\Menu::tree(\$categoryArray)); \$__LIST__ = cache('menu'); }else{ \$__LIST__ = cache('menu'); } ~~~ 簡化成 ~~~ if(!cache('menu')) { \$categoryArray = think\Db::name('category')->order('listorder')->select(); cache('menu',app\admin\model\Menu::tree(\$categoryArray)); } \$__LIST__ = cache('menu'); ~~~ 少寫一行數據 ### (二)TP5自帶緩存方法 自動識別首頁和分類頁的緩存數據,每個分頁標識不能一樣。比如:首頁分類ID為0,其它分類ID大于0 ~~~ $cache = 'recommend_' . $tag['catid']; cache("$cache",config('cache.expire')) ~~~ 定界符內容 ~~~ $php = <<<php <?php \$article_recommend = think\Db::name('article') ->where("$where") ->field('id,title,thumb,views') ->limit('$num') ->order('listorder desc') ->cache("$cache",config('cache.expire')) ->select(); \$__LIST__ = \$article_recommend; ?> php; ~~~ 模板中務必傳入catid,否則緩存一樣的 ~~~ <aside class="widget widget_hot_commend"> <h3 class="widget-title"><i class="fa-bars fa"></i>本站推薦</h3> <div id="hot" class="hot_commend"> <ul> {article:recommend name="vo" catid="$id" num="6" /} <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> {/article:recommend} </ul> <div class="clear"></div> </div> </aside> ~~~ ## 五、改進熱門文章 ### (一)標簽定義 ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num,name', 'close' => 1], 'recommend' => ['attr' => 'catid,num,name', 'close' => 1], 'list' => ['attr' => 'catid,num,name', 'close' => 1], ]; ~~~ ### (二)標簽申明 ~~~ public function tagHot($tag, $content) { if(empty($tag['catid']) || $tag['catid']=='0'){ $where = ''; }else{ $where = "catid=" . $tag['catid']; } if(empty($tag['num']) || $tag['num']=='0'){ $num = 8; }else{ $num = $tag['num']; } $cache = 'hot_' . $tag['catid']; $php = <<<php <?php \$article_hot = think\Db::name('article')->where("$where")->field('id,title')->limit('$num')->order('views desc')->cache("$cache",config('cache.expire'))->select(); \$__LIST__ = \$article_hot; ?> php; $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ ### (三)緩存運用 ~~~ $cache = 'hot_' . $tag['catid']; \$article_hot = think\Db::name('article') ->where("$where") ->field('id,title') ->limit('$num') ->order('views desc') ->cache("$cache",config('cache.expire')) ->select(); ~~~ ### (四)模板調用 ~~~ <aside class="widget widget_hot_post"> <h3 class="widget-title"><i class="fa-bars fa"></i>熱門文章</h3> <div id="hot_post_widget"> <ul> {article:hot name="vo" catid="$id" num="10"} <li><span class="li-icon li-icon-{$key+1}">{$key+1}</span><a href="#">{$vo.title}</a></li> {/article:hot} </ul> </div> </aside> ~~~ ## 六、首頁最新文章 ### (一)標簽定義 ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num,name', 'close' => 1], 'recommend' => ['attr' => 'catid,num,name', 'close' => 1], 'list' => ['attr' => 'catid,num,name', 'close' => 1], ]; ~~~ ### (二)標簽申明 ~~~ public function tagList($tag, $content) { //首頁cid=0,num>0 ; 分類頁cid>0,num=0 if(empty($tag['catid']) || $tag['catid']=='0'){ $num = $tag['num']; $php = <<<php <?php \$article_list = think\Db::name('article')->field('id,catid,title,thumb,description,inputtime,views')->limit("$num")->order('listorder desc')->cache('article_index',config('cache.expire'))->select(); \$__LIST__ = \$article_list; ?> php; }else{ $num = 0; $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')->paginate(); \$__LIST__ = \$article_list; ?> php; } $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ ### (三)標簽調用 ~~~ {article:list name="vo" catid="0" num="2"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></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> {/article:list} ~~~ ## 七、分類頁文章列表 ### 知識點: 分類頁文章列表,num為0,因為控制數量是由控制器完成的;但首頁文章列表的num是有數字限制的 首頁cid=0,num>0 ; 分類頁cid>0,num=0 ### (一)標簽定義 ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num,name', 'close' => 1], 'recommend' => ['attr' => 'catid,num,name', 'close' => 1], 'list' => ['attr' => 'catid,num,name', 'close' => 1], ]; ~~~ ### (二)標簽申明 ~~~ public function tagList($tag, $content) { //首頁cid=0,num>0 ; 分類頁cid>0,num=0 if(empty($tag['catid']) || $tag['catid']=='0'){ $num = $tag['num']; $php = <<<php <?php \$article_list = think\Db::name('article')->field('id,catid,title,thumb,description,inputtime,views')->limit("$num")->order('listorder desc')->cache('article_index',config('cache.expire'))->select(); \$__LIST__ = \$article_list; ?> php; }else{ $num = 0; $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')->paginate(); \$__LIST__ = \$article_list; ?> php; } $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ ### (三)標簽調用 ~~~ {article:list name="vo" catid="$id" num="0"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></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> <div class="layui-box layui-laypage layui-laypage-molv" style="float:right;"> {$__LIST__->render()} </div> {/article:list} ~~~ ### (四)文章分頁 #### 方法一(推薦) 1、標簽申明 ~~~ public function tagList($tag, $content) { //首頁cid=0,num>0 ; 分類頁cid>0,num=0 if(empty($tag['catid']) || $tag['catid']=='0'){ $num = $tag['num']; $php = <<<php <?php \$article_list = think\Db::name('article')->field('id,catid,title,thumb,description,inputtime,views')->limit("$num")->order('listorder desc')->cache('article_index',config('cache.expire'))->select(); \$__LIST__ = \$article_list; ?> php; }else{ $num = 0; $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')->paginate(); \$__LIST__ = \$article_list; ?> php; } $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; return $parse; } ~~~ 2、模板調用 ~~~ {article:list name="vo" catid="$id" num="0"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></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> <div class="layui-box layui-laypage layui-laypage-molv" style="float:right;"> {$__LIST__->render()} </div> {/article:list} ~~~ #### 方法二 1、標簽申明 ~~~ public function tagList($tag, $content) { //首頁cid=0,num>0 ; 分類頁cid>0,num=0 if(empty($tag['catid']) || $tag['catid']=='0'){ $num = $tag['num']; $php = <<<php <?php \$article_list = think\Db::name('article')->field('id,catid,title,thumb,description,inputtime,views')->limit("$num")->order('listorder desc')->cache('article_index',config('cache.expire'))->select(); \$__LIST__ = \$article_list; ?> php; }else{ $num = 0; $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')->paginate(); \$__LIST__ = \$article_list; ?> php; } $name = $tag['name']; $parse = $php; $parse .= '{volist name="__LIST__" id="' . $name . '"}'; $parse .= $content; $parse .= '{/volist}'; if($num==0){ $parse .= '<div class="layui-box layui-laypage layui-laypage-molv" style="float:right;">'; $parse .= '{$__LIST__->render()}'; $parse .= '</div>'; } return $parse; } ~~~ 2、標簽調用 ~~~ {article:list name="vo" catid="$id" num="0"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></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> {/article:list} ~~~ #### 方法三(僅供理解) 1、標簽定義 ~~~ protected $tags = [ 'menu' => ['attr' => 'name', 'close' => 1], //0閉合標簽 ,1不閉合(默認) 'hot' => ['attr' => 'catid,num,name', 'close' => 1], 'recommend' => ['attr' => 'catid,num,name', 'close' => 1], 'list' => ['attr' => 'catid,num,name', 'close' => 1], 'page' => ['attr' => 'catid', 'close' => 1], //實際不使用,僅供教學參考 ]; ~~~ 2、標簽申明 ~~~ public function tagPage($tag, $content) { //實際不使用,僅供教學參考 $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')->paginate(); \$vo = \$article_list; ?> php; $parse = $php; $parse .= $content; return $parse; } ~~~ 3、模板調用 ~~~ {article:list name="vo" catid="$id" num="0"} <article class="post type-post status-publish format-standard hentry"> <figure class="thumbnail"> <a href="#"> <img src="__UPLOADS__/{$vo.thumb}" alt="{$vo.title}"></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> {/article:list} {article:page catid="$id"} <div class="layui-box layui-laypage layui-laypage-molv" style="float:right;"> {$vo->render()} </div> {/article:page} ~~~
                  <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>

                              哎呀哎呀视频在线观看