2009年11月21日 星期六

Blogger 分頁功能



Blogger 的分頁破解語法提供了一次翻閱數頁的功能(請見姆奈網誌首頁最下方)。相較於 Blogger 內建「較舊/新的文章」兩連結只允許一頁一頁依序翻閱的限制,分頁功能顯得更為便捷,並帶來隨機翻閱的樂趣。分頁功能語碼最早出現於 2007 年秋末,原作者應是台灣人 Mr. J(目前關站)。一直到 2008 年夏末,分頁功能才首次出現在西方世界,例如 TechieBolgger,並被 Blogger 改造大站 Blogger Buster 引用。

妙的是:TechieBolgger 完全沒有提及該分頁語法的出處。


也許 TechieBolgger 提供的分頁語法為他所自創。但這個可能性不大,因為他的語法結構不僅與 Mr. J 雷同,連變數 var 命名都相差無幾。尤其這分頁語法似乎散發了濃厚的東方風情——正是指下面這段語碼:
timestamp+'T00%3A00%3A00%2B08%3A00

透過 Unescape 翻譯蒟蒻,我們知道這句話的意思是:
timestamp+'T00:00:00+08:00

「+08:00」代表什麼?沒錯,它指的就是台灣所在的時區。詭異的是,它的時刻卻取零點 00:00:00 而非文章發表當下的時刻(Mr. J 版本並沒有這種錯誤),那麼 +08:00 的意義又在哪兒?

當分頁時刻印花有誤,翻頁時就一定會出現文章闕漏的掉頁情形。誠如該訪客回應所言:
It is a good code except obviously has bugs and skips many posts for most users. I will have to remove it now. It seems you are failing to answer posts on this venue.

是的,TechieBolgger 對於眾網友的缺頁情形遲遲未有回應,——直到一年多後的上個月。他終於在新文內提出網友 Abu Farhan 提供的語法修正。(注意:Abu Farhan 網站於 2012 年末疑被駭為惡意網站,故我改掉連結網址。)

時刻印花應避免另外鍵入固定不變。修正後的語法直接呼叫 Blogger 內建的時刻印花,所以能避免分頁語碼時區與 Blogger 網誌設定時區衝突造成掉頁。而且,在施行日光節約的地區,時刻印花也能跟著發文季節彈性變動。以下為時刻印花範例:(歹勢,只是舉例,本網址頁並不存在喔~)

http://mkhere.blogspot.com/search?updated-max=2002-06-15T17:15:00-04:00&max-results=6

其中「2002-06-15T17:15:00-04:00」就是完整的時刻印花,而「-04:00」就是美國東區夏季的時區。(冬季則須變成「-05:00」。)


當年,台灣網誌作者 Mr. J 推出分頁語碼時,他在網友回饋下一步一步的修碼修 bug,並大方分享語法到其他論壇。看他積極開心的樣子,這串語碼很明顯是他的孩子——他就是首創。我不知道為什麼語碼在傳到西方後,作者來源就佚失了。如果當初點明這語碼是一個以方塊字行文的東方人的作品,也許一些不懂程式但頗具慧根的網友(像我XD)可以早些發現時刻印花與時區的奧妙。

另外一個站 Blogger Buster 對所收集的非自創語法會說明出處。例如他在試寫分頁語法失敗後,自白道:
After many failed attempts, I was almost ready to admit defeat with this function until I discovered this excellent script by Mohamed of Blogger Accessories (TechieBolgger).

噢,是的,這真是一串優秀的語碼。但它應該不是 TechieBolgger 的 Mohamed 所創寫的……


之前無意間發現另一種分頁語碼:


(一樣,許多網誌作者都大大咧咧將語法複製貼在網誌文章上,卻不標明出處。)它的原創者是 VietWebGuide(注意:此網站疑被駭為惡意網站,故我改掉連結網址)。其語法有幾項優點:

一、就我觀察,它讀取文章分類標籤(label/tag)feed 的方式不會對「非英文」標籤造成編碼 bug。(Mr. J 的版本在 Safari 上則無法識別中文標籤網址。)

二、直接呼叫 Blogger 本身設定的時區。

三、在 feed 址裡利用 start-index 語法,突破文章數 500 篇的限制。(Mr. J 的版本只能為最新 500 篇文章分頁。500 這個數目是 Blogger feed 本身的限制。)

但是這個分頁語碼有個小缺陷:無法在頁數框內輸入數字後直接按「enter/return」來翻頁。(在 FireFox 上正常,return 鍵只是沒有作用,必須點擊 Go 鈕才能翻頁。但在 Safari 和 Opera 下,return 鍵仍不能翻頁,並會給予錯誤命令使首頁重新載入。)


(Updated 1/17/2009)Abu Farhan 再度改編語法寫出了新的分頁小裝置(優美版傳統版),直接呼叫正確時區,而且沒有文章篇數 500 的限制。只是新語碼會使 Firefox 內建的「回前一頁」無法重現之前閱讀的頁數,並且在各瀏覽器裡對其他頁數另開視窗都無法成功翻頁。這是為突破文章數 500 並保持語碼快速所須做的讓步(上則 VietWebGuide 語法也有同樣問題),瑕不掩瑜。


--
注意:下方 Abu Farhan 的留言作者超連結會導向問題網頁,請勿點入。

19 則留言:

  1. Wow, complete story about Page Navi, but I can't understand All and I don't know about Mr. J.
    Can you make in english I wn to know about this page navi, Because I wan't to Make story about this in my blog, and I thought its from Mohammad Rias first time and I still compused about +8 for india (M. Rias Country) and you said this from Taiwan, yes i believe know it from taiwan because taiwan +8.
    Btw I made new script of page navi you can check at my blog.

    回覆刪除
  2. Welcome Abu Farhan! I was thrilled to see you here. Please do not make the Page Navi story big, since Mr. J seems to have disappeared from the internet (at least temporarily), and we can not be 100% sure about the origin of the code.

    I looked at your new Page Navi widget, and it is beautiful! However, I have noticed that pagination codes which can take more than 500 entries do not allow browsers to navigate "Back" to the last visited pages in the blog. Since I have only a few articles here, I will stay with Mr. J's code for now, but I believe many bloggers will find Mr. Abu Farhan's new widget very beneficial. Please allow me to update my article by adding a link to your new article. Thank you very much.

    回覆刪除
  3. ok, I'll not tell about Mr. J story because I can't find any link to proof this, The only proof is +8, but thats not enough, if no link to tell everyone.

    About Back from browser, I know about this already because I used href in js to change the link. Only you noticed about this, actually I can make script to reduce that problem, but new problem will be appeared that loading time will be very slow because have to read very big json file and loop calculations inside.

    you can update your story. I think only you know complete story about page navi, thanks for your post.

    回覆刪除
  4. Thank you.

    Although Mr. J's blog has been closed, there are several blogs which cited his article for his pagination widget. For example:

    http://guostone.blogspot.com/2007/11/blogspot.html

    This blog entry was created in Nov. 2007 by someone from Mainland China. The first sentence is, "First, I want to thank Mr. J - the Study of Everything from Taiwan", followed by an introduction and a copy of Mr. J's pagination code.

    BTW, I was amazed by how you managed to catch the main ideas of my article by using some online translator (I assumed). Most website translators suck when converting Chinese into other languages...XD

    回覆刪除
  5. 為了網站的分頁問題晃來了這裡,沒想到居然是台灣人先開始有這個 Code!呵!結果來了這想留言卻無法留,Google 了一下才發現是 Kaspersky 作怪。Thanks for the info :D

    回覆刪除
  6. 為了分頁google到這裡,沒想到還有這一個故事阿xd

    回覆刪除
  7. 林口長庚~我同學在腦外啊。:)

    回覆刪除
  8. hello 不好意思想請問版主一個題外問題...
    因為不知道要留言在哪,就暫且留在這裡了,還請見諒!

    今天發現有兩個人點了我裝在blogger文章裡的goog +1按鈕
    它有顯示在後台的文章標題後面,但只顯示了一個人
    大概象這樣︰

    2位使用者+1了這篇文章
    xxx
    還有1人

    「還有1人」沒有做連結,有搜尋到版主的解答
    是「在chrome上反白選擇後,用inspect element去看」
    我用火狐可以檢測元素,但是我不知道該怎呢看
    可以請問怎樣才能看到+1者的資訊呢?

    謝謝!

    回覆刪除
    回覆
    1. 「還有1人」的資訊是看不到的。我之前需要反白並inspect element,是因為我連「還有1人」的字樣都看不到,因為blogger當時有bug,顯示的位置落在瀏覽器視窗之外,所以我誤以為「還有1人」是可點選的連結,能提供更多資訊。但inspect element之後才知它只是文字、沒有連結。:)

      刪除
    2. 嗯我知道了! 感謝你!

      ps你的文章感覺很有趣,所以就訂閱了:p

      刪除
  9. MKnight 你好
    我正在尋找"blogspot 文章分頁", 而找到這裡的.

    在我手上相關的 JS, 在"首頁"以及相關連的, 都是正常,
    但是, 在"標籤"分頁時, 便會出錯.

    看你的網誌上, 分頁功能, 十分正常.
    請問, 可以分享你現時所使用的語法嗎 ?

    言身寸 言身寸
    FreeTong

    回覆刪除
    回覆
    1. 檢視我網誌的網頁原始碼,從
      <!-- Page Navigation -->
      複製到
      &max-results=9999" type="text/javascript"></script>

      在後台增加HTML/JavaScript元件,貼上這整串語碼,即大功告成。

      刪除
    2. 成功了, 謝謝你.
      只要修改一點點的顯示顏色, 就可以. ^_^!

      刪除
    3. 你好

      試用細看 Page Navigation 內容, 發現 first page & last page 有不正常的現象.
      當分頁數量比較多的時候, 算是有 31 頁.
      又點進中間分頁時, 前面應出現 "1 ...", 而後面出現 "...31",
      但是 JS 有錯, 或會出現 "1...1 2 3" or "28 29 31 ... 31" 等等.

      主要是有4句 if 的分析錯誤, 修改後使可以正常運作.
      列出這幾句, 以便參考.
      或是到我的網誌 http://freetongdiy.blogspot.hk/ 檢視相關的原紿碼.
      謝謝你提供 Page Navigation 的 JS 語法.

      原有的4句; 主要是錯誤引用"pageCount"
      if(htmlPoint>pageCount)
      if(htmlPoint>1 && htmlPoint<=pageCount)
      if(htmlPoint<(postNum-pageCount))
      if(htmlPoint<(postNum-1) && htmlPoint>=(postNum-pageCount))

      更正後的4句; 由"displayPageNum"控制結果.
      if(htmlPoint>displayPageNum+1)
      if(htmlPoint>1 && htmlPoint<=displayPageNum+1)
      if(htmlPoint<(postNum-displayPageNum-1))
      if(htmlPoint<(postNum-1) && htmlPoint>=(postNum-displayPageNum-1))

      刪除
    4. and
      可不可以介紹, 這段 Page Navigation 的 JS 語法出處 ?
      言身寸

      刪除
    5. 我這段語法在我網誌環境下工作正常,毋須修正。謝謝。

      這段語法的來源就是 Mr. J ,只是被我稍作修改,以配合我網誌環境。

      刪除
    6. 謝謝你
      請問可不可以公開及推介這套語法嗎?

      刪除