作者eurt (E')
看板Blog
标题[教学] Blogger Beta在版面上隐藏特定Label文章
时间Sat Oct 28 22:16:30 2006
好吧,那些想要完美的藏起文章的人,若是不想失望的话,现在就可以按下左键离开了。
这个方法并没有那麽完善-老实说,还会让读取的效率更差。所以待会你读到的内容不该
称为教学,充其量只能算是实验而已。
被吓倒的人应该已经离开了吧?这个方法的起因是这样,某些时候可能我不想让某篇文章
显示在版面上,例如说我要设一篇文章做为留言板,而我并不想让这篇文章和其他文章混
在一起-尤其是在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里还是读的到啊!除非你把它关闭,或文章的内容并不重要到需
要在意。在这里奉劝老话一句:
若真不想让人看到,就别放到网路上吧。
这篇文章很长,谢谢你把它看完,若是你也有兴趣,一起来讨论吧。
--
『你跟妈妈,发了什麽誓?』
『早晚都要刷牙。』
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.224.117