之前寫過的《關閉/顯示你的 WordPress 側邊欄,享受閱讀快感》,當時並沒有考慮到 Cookies 記錄狀態欄被改變後的狀態問題,實在是我的不專業。總不能讓用戶不厭其煩的點擊關閉/顯示側邊欄吧。體驗很不好!所以抽空對其進行了修改,讓其可以根據 Cookies 來記錄你的 WordPress 側邊欄的狀態是關閉的還是顯示的。
在本篇教程的開始之前,先感謝下 PhilNa 兄的幫助,讓我解決了 Cookies 保存路徑的問題,這樣的話不管在哪個內頁設置側邊欄的狀態,Cookies 都將保存到根路徑 “/”。
因為之前寫過很詳細的關閉/顯示 你的 WordPress 側邊欄的教程了,所以請搭配前文觀看。
如果你對之前的那篇文章沒有理解上的困難的話,那麼就開始我們的升級版之旅吧!
1.js的更新,使用這段js代碼:
<script type="text/javascript" language="javascript"> $(document).ready(function(){ //SetCookies (function(){ function SetCookie(c_name,value,expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toGMTString())+";path=/"; //如果你希望每個頁面都有個獨立的 Cookies 設置的話請去掉+";path=/",這樣的話leeiio.me/xxx/ 和leeiio.me/yyy/ 的側邊欄狀態都將是獨立的 } window['RootCookies'] = {}; window['RootCookies']['SetCookie'] = SetCookie; //JavaScript 的命名空間,假使你已有一個 SetCookie 的函數的話將不會與之衝突,通過 RootCookie.SetCookie() 調用 })(); //Toggle Sidebar $('.close-sidebar').click(function() { RootCookies.SetCookie('show_sidebar', 'no', 1); //設置一個名為show_sidebar的cookie,值為no,保存天數為1 $('.close-sidebar').hide(); //隱藏"關閉側邊欄"按鈕 $('.show-sidebar').show(); //顯示"顯示側邊欄"按鈕 $('.sidebar').fadeOut(1000); $('#content').animate({width: "910px"}, 1000); }); $('.show-sidebar').click(function() { RootCookies.SetCookie('show_sidebar', 'no', -1); //設置一個名為show_sidebar的cookie,值為no,保存天數為-1,也就是說讓cookies失效,也就是刪除這個cookie $('.show-sidebar').hide(); //隱藏"顯示側邊欄"按鈕 $('.close-sidebar').show(); //顯示"關閉側邊欄"按鈕 $('#content').animate({width: "690px"}, 1000); $('.sidebar').animate({opacity: 1.0}, 500).fadeIn('slow');}); }); </script> |
2.插入控制按鈕
<?php if(!$_COOKIE['show_sidebar']=='no'):?> //當Cookie為show_sidebar的值為0的時候 <li class="close-sidebar" title="關閉側邊欄">關閉側邊欄</li> <li class="show-sidebar" style="display:none;" title="顯示側邊欄">顯示側邊欄</li> <?php else: ?> <li class="close-sidebar" style="display:none;" title="關閉側邊欄">關閉側邊欄</li> <li class="show-sidebar" title="顯示側邊欄">顯示側邊欄</li> <?php endif;?> |
將這段代碼插入你模板中需要顯示功能按鈕的地方即可!
3.設置css,當側邊欄不顯示的時候,讓正文區域寬度增大,側邊欄不顯示
<?php if($_COOKIE['show_sidebar']=='no'):?> //當Cookie為show_sidebar的值為no的時候,載入一下的兩個css <style type="text/css"> #content {width:910px;} //讓主題部分的寬度為910px,請參照自己的blog進行調整 .sidebar {display:none;} //讓側邊欄不顯示 </style> <?php endif;?> |
將以上這段代碼插入index.php以及single.php以及page.php頁面,如果你還有別的頁面的話,同理插入這段代碼!
如果你不想讓自己的模板文件插入這些css的話,第3步還可以這樣寫。將第1步的js修改為如下
<script type="text/javascript" language="javascript"> $(document).ready(function(){ //SetCookies (function(){ function SetCookie(c_name,value,expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toGMTString())+";path=/"; //如果你希望每個頁面都有個獨立的 Cookies 設置的話請去掉+";path=/",這樣的話leeiio.me/xxx/ 和leeiio.me/yyy/ 的側邊欄狀態都將是獨立的 } window['RootCookies'] = {}; window['RootCookies']['SetCookie'] = SetCookie; //JavaScript 的命名空間,假使你已有一個 SetCookie 的函數的話將不會與之衝突,通過 RootCookie.SetCookie() 調用 })(); //Toggle Sidebar $('.close-sidebar').click(function() { RootCookies.SetCookie('show_sidebar', 'no', 1); //設置一個名為show_sidebar的cookie,值為no,保存天數為1 $('.close-sidebar').hide(); //隱藏"關閉側邊欄"按鈕 $('.show-sidebar').show(); //顯示"顯示側邊欄"按鈕 $('.sidebar').fadeOut(1000); $('#content').animate({width: "910px"}, 1000); }); $('.show-sidebar').click(function() { RootCookies.SetCookie('show_sidebar', 'no', -1); //設置一個名為show_sidebar的cookie,值為no,保存天數為-1,也就是說讓cookies失效,也就是刪除這個cookie $('.show-sidebar').hide(); //隱藏"顯示側邊欄"按鈕 $('.close-sidebar').show(); //顯示"關閉側邊欄"按鈕 $('#content').animate({width: "690px"}, 1000); $('.sidebar').animate({opacity: 1.0}, 500).fadeIn('slow');}); //與第1步不同的地方開始,以下是區別與第一步js的新增代碼 //Get cookies Value 獲取cookies的值 var cookies = document.cookie.split("; "); function GetCookieValue(cookieName) { var ret = null; for (var i = 0; i < cookies.length; i++) { var leeiiocookies = cookies[i].split("="); if (cookieName == leeiiocookies[0]) { ret = unescape(decodeURI(leeiiocookies[1])) } } return ret } //判斷cookies的值 if ('no' == GetCookieValue('show_sidebar')){ $('#content').css({'width':'910px'}); //讓正文區域的寬度設置為910px,也就是隱藏sidebar之後的可使寬度,你也可以修改為關閉側邊欄時候的動態效果 $('.sidebar').hide(); //讓側邊欄隱藏 }); </script> |
不過我還是推薦將 css 寫入模板文件,因為這樣通過 php 判斷的話,用戶看到的直接就是側邊欄已經消失了且正文寬度增大後的效果,通過 js 的話在 js 未載入完全之前頁面還是先前的樣子,然後側邊欄才會消失,正文也會變寬。
大功告成!代碼裡面加了很詳細的注釋了,沒加註釋的在前篇也都已經注釋並解釋過,怎麼樣,很 easy 吧!如果你耐心地看完了本文的話,確實是很 easy 的!jQuery 真簡便啊真簡便!
謝謝觀賞!
這次沙發該是我的了吧~ 😛
@Sivan 沒錯,feedsky的rss都還沒刷新呢呵呵~
簡單試了一下,沒成功,側欄也沒消失。 😥
時間緊迫,明天我再仔細研究吧。
嗯,支持不斷完善。
再說那個代碼高亮的插件讓頁面的w3c標準下很多問題呢。
@Jinwen
那你的代碼是如何處理的?你博客上的代碼似乎都是正常顯示而沒有被解析!
😯
恩 不錯啦~
前幾天逛論壇,發現 Discuz! 也有這樣的功能 呵呵~
來插小紅花~~暫時不折騰~呵呵!
跟PhilNa一樣,也有一串的錯誤代碼….
知道哪裡的問題了。
window[‘RootCookies’] = {};
window[‘RootCookies’][‘SetCookie’] = SetCookie;
這裡改成
window[‘PHC’] = {};
window[‘PHC’][‘SetCookie’] = SetCookie;
或者把PHC.SetCookie(‘show_sidebar’, ‘no’, 1); 改成
RootCookies.SetCookie(‘show_sidebar’, ‘no’, 1);
都可以正常運作,但是打開別的頁面後,導航顯示的開關鈕正確,但是側欄沒有隱藏。
對了,還有我的頁面http://demo.sivan.in/把那個”easeOutBounce”刪除了才有效果,不知道是不是跟我改變兩個類的長度有關。默認的代碼只能隱藏邊欄,正文區域不能變寬。
現在只有按鈕那裡正常了,是不是sidebar那裡也要加一個
<?php if(!$_COOKIE[‘show_sidebar’]==’no’):?>
這樣的判定呢?
@Zoll
恩,關閉側邊欄的功能還是滿常見的。
@吖Bee
錯誤代碼是新評論發送簡訊提醒所致,暫時先停掉那個功能了~
@Sivan RootCookies只是一個命名空間,我下面忘記改了,現在修改了模板的部分了,應該可以正常了。你最好先清除下你的cookies再進行測試,應該是沒有問題了的。
@Sivan
我的疏忽,easeOutBounce是我的插件,原文又修改了。sidebar那裡不用加判斷不然的話側邊欄就不能調用了。
@Sivan
繼續疏忽,發現自己漏寫了一段代碼…昨天我肯定腦袋被門板夾過了,更新中。
@Leeiio
偶耶=3=成功了~
@Sivan
我昏頭了確實,還真對不起讀者啊,半成品都發出來了,好在我的站目前關注度還不高哈~
@Leeiio
因為我根本沒有用代碼高亮的插件,呵呵。現在每次更改主題我都得看w3c上是否通過的,那些東西很麻煩,還不如不加。
😀 謝謝leeiio的辛勤勞動啊 等我學到Cookies部分就來好好研究研究
@Jinwen
http://thisblog.usejquery.com/2009/03/11/highlight-your-source-code-with-jquery-and-chili
這篇文章是教人利用jQuery與Chili來高亮代碼的 貌似可以通過W3C驗證的,有心情可以研究研究
越來越專業了,絕對收藏!!
twitter看到好幾條了.一直在更新??我的那個theme不知道能用不能用,有時間我也研究研究…
試試啊 😀 😀
問一下第三部的css插入到那些頁面的具體什麼位置呀??還是說頁面的什麼位置都可以嗎??
@kerby
頁面的最頂上即可~
Pingback: RSSA頻道 » Blog Archive » 美化 Wordpress 標題,個性字體生成圖片標題插件推薦!
我現在想要的效果是,主頁顯示側邊欄,內容頁去除側邊欄,並且內容頁變大,我覺得比你現在的效果簡單多了,但是我不知道怎麼解決,謝謝!
@程曉濤
wordpress後台編輯主題那裡不是分開了首頁index.php和單獨也single.php么,兩個頁面分開定義格式就可以了~
最近我也在用cookie結合js做一些東西。。
Pingback: JQuery(側邊欄(開/關)測試…完美 | MOPVHS's Blog
試了很多次,關閉側邊欄刷新後還是會出現
@潔 cookies沒設對吧
現在的代碼算完整了嗎?我怎麼用了沒有效果呢?
@龍飛揚 可否給出地址我看看
我是新手我用了點了也沒效果,代碼頁看不太懂。麻煩能不能整合成文件,直接用函數來調用。謝謝!其實我是想要一個滑動隱藏的側邊欄效果。呵呵。這個對我來說就更是天方夜譚了。。。。就類似一些滑動的分享按鈕那樣的。望能收到你的答覆。
@小白 呃,不好意思,這裡只提供了思路,不太有空整個傻瓜式的安裝方法,見諒
按照這樣弄的。還是沒有效果。
@愛惜 繼續
不知道那裡出錯了。請教了。
@愛惜 這個對js乃至對jQuery沒有一定了解的話還是不建議折騰了
@Leeiio 好久沒看見更新了 原來還在答疑啊 哈哈~
😥 咋就看不懂呢.. 不知道放到什麼地方 js 要新建文件嗎 ?
Pingback: 開關邊欄和cookies那些事 | Ben is Me