Blogger Beta在版面上隱藏特定Label文章 - 部落格

By Thomas
at 2006-10-28T22:16
at 2006-10-28T22:16
Table of Contents
好吧,那些想要完美的藏起文章的人,若是不想失望的話,現在就可以按下左鍵離開了。
這個方法並沒有那麼完善-老實說,還會讓讀取的效率更差。所以待會你讀到的內容不該
稱為教學,充其量只能算是實驗而已。
被嚇倒的人應該已經離開了吧?這個方法的起因是這樣,某些時候可能我不想讓某篇文章
顯示在版面上,例如說我要設一篇文章做為留言板,而我並不想讓這篇文章和其他文章混
在一起-尤其是在Archive裡-性質的不同會讓它顯的突兀。假如我現在用的是樂多,我
可以將這篇留言板設為草稿,然後把這篇文章的連結設在Sidebar裡;而在Blogger Beta,
這個方法就行不通了,因為draft是無法連結的。
在下面的例子中,我們透過兩個條件來達成目的:Label和時間。為了將其隱藏起來,我
們用一個特定的Label來控制,當這篇文章的最後一個Label是特定Label時,那麼將只有
連到文章本身(也就是type Item)時才會顯示。
而Archive的部份,由於迴圈跑的是月份,所以我將特定的月份隱藏起來。原本想要做的
是只隱藏該篇,但好像做不到,只好如此變通。另外一件事,在下面的例子中是使用下拉
式選單的Archive來做範例,使用另外兩種方式的朋友,請試著自行設條件吧。
下面將使用Blogger Beta內建的template Minima(迷你馬)來當例子。
第一部份:文章迴圈
在迷你馬的Expand Widget Templates裡面找到這個迴圈:(開始和結尾的綠色註解是為了
待會兒較好理解加上的,找不到是正常現象,請安心服用)
<b:loop values='data:posts' var='post'>
<!-- 文章開始 -->
<b:if cond='data:post.dateHeader'>
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>
<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:post.allowComments'>
<b:include data='post' name='comments'/>
</b:if>
</b:if>
<!-- 文章結束 -->
</b:loop>
這個迴圈做的事是跑目前條件下的所有文章,然後秀出日期,文章,註解。
下面這個很長的玩意兒是修改後的迴圈:(黃色內容為新加上)
<b:loop values='data:posts' var='post'>
<b:if cond='data:post.labels'>
<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.isLast == "true"'>
<b:if cond='data:label.name == "notinmainandarchive"'>
<b:if cond='data:blog.pageType == "item"'>
<!-- 文章開始 -->
<b:if cond='data:post.dateHeader'>
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>
<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:post.allowComments'>
<b:include data='post' name='comments'/>
</b:if>
</b:if>
<!-- 文章結束 -->
</b:if>
<b:else/>
<!-- 文章開始 -->
<b:if cond='data:post.dateHeader'>
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>
<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:post.allowComments'>
<b:include data='post' name='comments'/>
</b:if>
</b:if>
<!-- 文章結束 -->
</b:if>
</b:if>
</b:loop>
</b:if>
</b:loop>
這個新的迴圈做的事是這樣:跑目前條件下的所有文章,跑該篇文章的所有Label,假如
最後一個Label是特定的Label的話(在這個例子中是notinmainandarchive),檢查目前頁
的type是不是item,如果是才顯示該篇文章。假如最後一個Label不是特定的Label,直接
顯示該篇文章。
在這裡有一件事需要注意,文章的Label會依照字母來排序,因此你所設定的Label最好用
Z開頭(中英文混用會怎麼排序?對不起我沒有試過),或聽取我的建議,要隱藏的文章只
使用一個Label就好。提醒另一件事,當使用這個新迴圈之後,沒有Label的文章是不會顯
示的。
第二部份:Archive下拉選單
在你新增了Archive這個Element之後,一樣在Expand Widget Templates可以找到:
<b:includable id='menu' var='data'>
<select expr:id='data:widget.instanceId + "_ArchiveMenu"'>
<option value=''><data:title/></option>
<b:loop values='data:data' var='i'>
<!-- 這行太長,折成兩行 -->
<option expr:value='data:i.url'><data:i.name/>
(<data:i.post-count/>)</option>
<!-- 折完了 -->
</b:loop>
</select>
</b:includable>
修改後的如下:
<b:includable id='menu' var='data'>
<select expr:id='data:widget.instanceId + "_ArchiveMenu"'>
<option value=''><data:title/></option>
<b:loop values='data:data' var='i'>
<b:if cond='data:i.name != "Sep 2002"'>
<!-- 這行太長,折成兩行 -->
<option expr:value='data:i.url'><data:i.name/>
(<data:i.post-count/>)</option>
<!-- 折完了 -->
</b:if>
</b:loop>
</select>
</b:includable>
新加上的條件,不在下拉選單裡顯示2002年九月,如此一來我將要隱藏的文章發佈時間設
在2002九月,Archive裡就沒有它了。
就算是用硬連結也不會顯示(例如這樣的連結
http://lucyintheskywithdiablo.blogspot.com/2002_09_01_archive.html )
,因為在文章迴圈那裡已經有控制了。
結語
由於在迴圈裡多跑了一個Label,所以理論上讀取會比以前還要慢。許多地方都使用了較
沒有效率的硬方法來做,仍有許多改進空間。還有一件最重要的事:你以為這樣文章就
隱藏起來了嗎?其實feed裡還是讀的到啊!除非你把它關閉,或文章的內容並不重要到需
要在意。在這裡奉勸老話一句:若真不想讓人看到,就別放到網路上吧。
這篇文章很長,謝謝你把它看完,若是你也有興趣,一起來討論吧。
--
『你跟媽媽,發了什麼誓?』
『早晚都要刷牙。』
--
Tags:
部落格
All Comments
Related Posts
無名背景有兩個地方不能設定為『透明』

By Victoria
at 2006-10-28T12:40
at 2006-10-28T12:40
blogger轉blogger beta

By Delia
at 2006-10-28T12:36
at 2006-10-28T12:36
wretch for wordpress

By Jack
at 2006-10-28T01:19
at 2006-10-28T01:19
RSS訂閱會增加瀏覽人數嗎

By Anthony
at 2006-10-28T00:14
at 2006-10-28T00:14
Re: PTT Blog板友簽到簿(PTTBlogRolling!)

By Caroline
at 2006-10-28T00:13
at 2006-10-28T00:13