1. 程式人生 > >Dedecms當前欄目高亮完美處理辦法…

Dedecms當前欄目高亮完美處理辦法…

程式碼先行:

/templets/default/head.htm PHP
0 1 2 3 4 5 6 7 <</span>div id="navMenu"> <</span>ul> <</span>li><</span>a href='{dede:global.cfg_cmsurl/}/'><</span>span>主頁<</span>/span><</span>/a><</span>/
li>
{dede:channel type='top' row='10' currentstyle=" <</span>li><</span>a href='[field:typeurl/]' [field:rel/]><</span>span>[field:typename/]<</span>/span><</span>/a><</span>/li> {/dede:channel} <</span>/ul> <</span>/
div>

上面的這段程式碼,如果熟悉Dedecms的童鞋應該知道,這其實是Dedecms 5.7裡面預設模版導航部分的程式碼片段。仔細學習下官方的這一段程式碼就足以解決今天這篇文章的這個問題,這也是筆者苦經周折才恍然大悟的,下面我們還是從頭說起:

邊欄

用Dedecms做站的時,很多時候會在內頁裡嵌入邊欄作為區域性的快捷導航,如果是單純的邊欄,那用{dede:channel}可以很輕鬆的實現對欄目標題的呼叫。但是往往我們對邊欄的樣式要求會更多一些,比如這裡,當前欄目的標題在邊欄裡和其它同級欄目標題顯示的要不一樣,表現在CSS上就是應用的class不同,看圖:

邊欄解析

這裡就是,當前欄目下在css上面多了一個on的類別。這一多不要緊,破壞了原有程式碼的可迴圈性,這就使得原來簡單的{dede:channel}呼叫程式碼無法滿足這樣的要求。於是筆者在這裡首先想到的是加判斷,如果是當前所在的欄目,則引用on類,否則不應用。對於判斷筆者試過[field:typename]也試過[field:array],是沒法簡單的通過判斷實現,而為了這麼個效果要一大段程式碼的話,犧牲的效率就很划不來,所以筆者放棄用這些標籤去進行判斷。筆者在網上看到有人用下面這種方式進行判斷:

0 1 2 3 4 5 6 7 <</span>ul class="nav"> <</span>li class='nav0{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me!="1"&@me!="2"&@me!="3"&@me!="4"&@me!="5"&@me!="6")@me=" clock_on0"; else @me="";{/dede:field}'><</span>a href="/"><</span>/a><</span>/li> <</span>li class='nav1{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="1")@me=" clock_on1"; else @me="";{/dede:field}'><</span>a href="/About_us"><</span>/a><</span>/li> <</span>li class='nav2{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="2")@me=" clock_on2"; else @me="";{/dede:field}'><</span>a href="/News"><</span>/a><</span>/li> <</span>li class='nav3{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="3")@me=" clock_on3"; else @me="";{/dede:field}'><</span>a href="/Service"><</span>/a><</span>/li> <</span>li class='nav4{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="4")@me=" clock_on4"; else @me="";{/dede:field}'><</span>a href="/Works"><</span>/a><</span>/li> <</span>li class='nav5{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="5")@me=" clock_on5"; else @me="";{/dede:field}'><</span>a href="/Join"><</span>/a><</span>/li> <</span>li class='nav6{dede:field name="typeid" runphp="yes" function="GetTopid(@me)"} if(@me=="6")@me=" clock_on6"; else @me="";{/dede:field}'><</span>a href="/Contact"><</span>/a><</span>/li> <</span>/ul>

 if(@me==”5″)部分是判斷欄目的頂級ID,根據需要修改,A標籤中的連線需手動新增,名稱按需求新增。以上用的是圖片,所以A標籤中無內容。

拋開效率不談,實現是可以實現的,但是筆者認為這種辦法的弊端就如同上面引用的使用方法一樣,那就是全手動。一來,筆者比較懶,不喜歡手動一個一個改,假使欄目成百上千個這麼改還不要了筆者的小命;二來,筆者不喜歡一堆長而重複的程式碼解決一個小問題,總有點高射炮打蚊子的感覺;三來,對於做Dedecms的模版,筆者始終認為模版就是模版,模版做好後在日常使用中應最大可能避免再去修改模版中的程式碼;於是果斷放棄了這種方法。一籌莫展之際,突然想到這麼常用的一個東西,Dedecms官方團隊怎麼可能會不預製到程式碼裡而需要我們這麼大費周章呢,遂開始挖掘程式碼,這才挖出了本文開頭引入的那段程式碼。發現果然有預製,根本不需要我們在做什麼改動和開發,在{dede:channel}標籤裡還有一個”currentstyle“屬性,其作用就是在迴圈輸出的{dede:channel}中獲得當前頁面所屬的”channel”,併為其應用上”currentstyle“屬性裡的內容。看程式碼說話:

currentstyle屬性詳解 PHP
0 1 2 3

相關推薦

Dedecms當前欄目完美處理辦法

程式碼先行: /templets/default/head.htm PHP 0 1 2 3 4 5 6 7 <</span>div id="navMenu"> <</span>ul>

帝國cms教程父欄目和子欄目都能在當前欄目

oop get bsp tar ecms In avclass img exp 首先在/e/class/userfun.php這個文件裏面加上下面代碼.上面父欄目的,下面子欄目的.紅色代表css樣式.自定義吧 function currentPage($classid,$t

織夢channelartlist標簽當前欄目

== top nts info 方法 run obj 支持 .lib channelartlist標簽完美支持currentstyle屬性,實現自動加載當前欄目CSS樣式,可以用來標識當前欄目位置的CSS,解決方法如下: 打開文件include\taglib\channel

織夢CMS,當前欄目顯示

不多說廢話,直接上程式碼。 1 2 3 4 5 6 7 8 9 {dede:php} $GLOBALS['thisid'] = intval($refObj->Fields['id']); {/dede:php} <ul> <li

dedecms織夢列表頁內容頁欄目當前欄目呼叫二級三級欄目

1、開啟 \include\taglib\channelartlist.lib.php 找到 $tpsql = " reid='$typeid' AND ispart<>2 AND ishidden<>1 "; 改成 if(

ecshop文章側邊欄導航,自動呼叫文章多級子欄目分類並且當前欄目及父欄目顯示

效果圖 介紹: 一,比如訪問ecshop的國內新聞(上圖沒顯示),及子分類,如山東新聞,臨沂新聞,上海新聞等,都會自動顯示上圖所示的側導航條. 二,另外,如果我訪問子導航,比如居民小區,則平涼新聞的兄弟欄目,父欄目,子欄目,都可以自由設定高亮顯示.而山東新聞及其子欄

織夢一二級導航菜單被點擊頂級欄目(加class)解決方法

lis 圖片 HR 生成 多說 span 找到 self color 織夢一二級導航菜單被點擊的欄目高亮顯示方法詳解,廢話不多說直接舉例說明: 織夢一級菜單被點擊欄目高亮調用方法: {dede:channel typeid =‘1‘ type =‘son‘ current

activiti工作流顯示流程圖且當前節點

1、將檔案ProcessDiagramGrnerator.java和ProcessDiagramCanvas.java拷貝到自己的專案中(所需檔案下載地址在文末附錄中)。 2、將以下程式碼新增到service層的ProcessTaskService.java中

iview的選單元件Mune 點選不的解決辦法 vue

前言: 在專案中,我用到了vue +iview + vue-router 開發; 然後導航條就使用了iview的Menu元件,結果發覺導航條的內容點選一次之後不會顯示高亮樣式,而是先跳轉了,我再點選一次,才會高亮顯示。 在看了vue-router的文件之後,發

Android程式設計心得-ListView的Item顯示的辦法

在我們使用ListView的時候,經常會遇到某一項(Item)需要高亮顯示的情況,如下圖,有人說當我們點選子項的時候會變亮,但有時候業務邏輯需要讓ITEM根據條件自動變亮,下面我來介紹一下我自己的解決辦法 1.首先在layout資料夾對應的xml配置檔案定義一個l

無法刪除當前已連線的使用者處理辦法

此操作在命令列方式下進行。 開啟命令列視窗,輸入 sqlplus /nolog 進入sqlplus命令列 SQL>conn sys/password as sysdba; SQL>drop user "username" cascade; --刪除使用者 SQL

"無法刪除當前已連線的使用者"處理辦法

轉自:http://zhuhonghao.javaeye.com/blog/434635 此操作在命令列方式下進行。 開啟命令列視窗,輸入 sqlplus /nolog 進入sqlplus命令列 SQL>conn sys/password as sysdba; SQL

win10 當前操作環境不支持支付寶控件 完美解決辦法

配置 div 接下來 下載 .cn 用戶 重要 分享 alipay 第一步,修改系統配置 在運行中輸入“gpedit.msc”打開本地組策略編輯器: 打運行窗口的方法是:按win鍵+R (按下win鍵再按R鍵之後 同時松開) w

織夢cms導航顯示欄目及首頁的方法

網站 field 紅色 typeid 高亮顯示 php 亮顯 一定的 是否 直奔主題了,高亮顯示教程適用於您具有一定的CSS基礎才可以了,前提把高亮顯示的樣式寫好,然後再開始高亮顯示標簽適用。 <li {dede:field name=typeid runphp="y

css中固定寬div與不固定寬div垂直居中的處理辦法

分配 css代碼 http min har 空間 -i dex round 固定高寬div垂直居中 如上圖,固定高寬的很簡單,寫法如下: 1 position: absolute; 2 left: 50%; 3 top: 50%; 4 width:200px;

[JS]在js中進行正則替換顯示處理中,重復替換問題,可以使用js自帶的批量替換,則不會重復替換

數組組合 高亮顯示 log words reg his ucc div == //js高亮顯示 function highlight(){ if($.trim($(‘#pscws‘).val()) != ‘‘){ var url = $("#analys

織夢dede:channel指定typeid子欄目調用currentstyle無效的解決教程

code 解決 current php info 打開 typeid tle chan dede:channel指定typeid時currentstyle無效 {dede:channel typeid=‘12‘ type=‘son‘ currentstyle="<a

js實現當前導航選單顯示

html: <div id="navi"> <ul> <li><a href="1.html">主頁</a></li> <li><a href="2.html">欄目1</a></l

利用OpenCv對暗背景以及對於前景的預處理

程式碼 import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('test.jpg') #圖片讀入 kernel=cv2.getStructuring

PHP之後端處理使返回給前端的資料顯示

根據傳入的條件進行模糊查詢,這裡使用的是CI框架,其他框架模糊查詢貌似更簡單,不用使用原生SQL,直接使用模型 <?php class User extends CI_Model { public function __construct() {