2013年10月11日 星期五

標籤/搜尋頁面只列出標題 (Simplify the result of label and search)



標籤/搜尋頁面只列出標題 (Simplify the result of label and search)

Blogger 首頁允許你設定最多顯示的文章數量,但是,其他的地方就不一定了。像是標籤、搜尋、網頁存檔等等匯總的頁面,文章一多一點進去,嘩啦一狗票的文章就通通連內文一併列出來,預設最多會出來 20 篇左右,但如果是歷史文章存檔的匯總,搞不好上限是 999,那通通都列出來還得了!因此,我們可能希望當點到標籤、列出搜尋結果或是歷史文章存檔,可以只列出時間和標題,有需要詳細內容的再點進去觀看。
這類的 Hack 很簡單也很普遍,後面的參考文章也都有提,但是我的需求有一點點不一樣,我「只」希望在標籤和搜尋頁面列出標題,但是在存檔頁面 (Archive) 裡面還是像首頁列出原文(不然,我做那麼多「繼續閱讀」的 Hack 效果只出現在首頁也浪費了),根據我之前的文章介紹 Blogger 內的四種頁面判斷句,也做了一點點修改。Hack 的第一個步驟,同樣是編輯範本的完整 HTML(要展開小裝置範本),找到下面的這一段(如果你裝過其他 Hack,可能不是長這樣,不過,關鍵是紅色那一行):
<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>

解釋一下,這是樣版用來「列出文章」用的範本,「任何」一種狀況下適用,那段 date-header 的是列出日期,而紅色那一行的意思就是「列出全文」。我們要動的手腳正是:「只在某些條件下列出原文,其他情況,列出標題就好」,這樣的修改,只要把下面這一段判斷取代掉上述紅色的那一行即可:

<b:if cond='data:blog.homepageUrl != data:blog.url'>
  <b:if cond='data:blog.pageType == "index"'>
    <!-- Show article title only -->
    <h3 class='post-title'><a expr:href='data:post.url'><data:post.title/></a></h3>
  <b:else/>
    <b:include data='post' name='post'/>
  </b:if>
<b:else/>
  <b:include data='post' name='post'/>
</b:if>

上面這一段的意思是:當現在所在的頁面「不是首頁」,而且,PageType 為 index (標籤/搜尋) 的時候,只列出文章的標題,否則,維持原樣列出完整內文。好!這樣就改好了!(很簡單吧!)如果你是想改的是「除了首頁」以外的頁面都只列出標題(也就是存檔頁面也要只列出標題),那麼可以把上面那段的第二行改成:
<b:if cond='data:blog.pageType != "item"'>
這樣就是:當現在所在頁面「不是首頁」,而且也「不是單篇文章的內文」時,就通通只列標題。
此外,其實這個 Hack 還有很多變化型,可以更動「只列出標題」頁面的樣式,像是「只列出標題卻不含日期」(那你要把上面 date-header 列出日期那段也塞入判斷句裡),或是更改 <h3 class='post-title'> 的 CSS。如果你也有用到我 Comment Toggling 的 Hack,那麼建議你關於 Comment: <b:if cond='data:post.allowComments'> 那三行最好也塞入判斷句裡去,這樣原始碼也會比較簡潔。
本來想偷懶不寫這一篇,因為自己的樣版已經不夠「標準」了,要怎麼 Hack 有點忘了,不過剛好有網友再問,所以還是依照我參考的原文,還有自己的一點點心得,整理了這一篇。

本文引自 http://abintech.twidv.com/2007/03/simply-result-of-label-and-search.html

沒有留言:

張貼留言