如果注意過 TiddlyWiki 的 HTML 檔案, 你會發現 Firefox 所儲存的中文是很直覺的內容,
但是 IE 或是 Google Chrome 所儲存的中文卻是『很難看得懂的編碼』(簡稱『亂碼』?)
這是怎麼一回事, 有沒有辦法來改善呢?
.
(...繼續閱讀.../...CONTINUE...)
/ 水瓶尤加利的 DIY 小天地 / 雜誌模式 / English Posts
----
生活 (居家修繕 DIY, 陽台菜園, 攝影遊記...) / ----
科技 (軟體, 硬體, 程式設計, 電腦與我...) /
如果注意過 TiddlyWiki 的 HTML 檔案, 你會發現 Firefox 所儲存的中文是很直覺的內容,
但是 IE 或是 Google Chrome 所儲存的中文卻是『很難看得懂的編碼』(簡稱『亂碼』?)
這是怎麼一回事, 有沒有辦法來改善呢?
.
接下來的『相關度』和『標籤雲』都會加上 HSL 的方式來處理顏色。在改版發表之前, 可以到我的『HSL 測試頁』先體驗一下。
一般的作法 線性內差 得到的『色彩漸層』中間的部分常常是 灰色 | 但是, 在 HSL 色彩空間 得到的卻是彩虹般的『紅橙黃綠藍』 |
.
簡單吧 !!
.
.
是的, 使用者只需要以 RGB 來設定顏色, 程式內部會自動換算 RGB 到 HSL,
如果你還是好奇, 希望以下這些『應用面的觀念』可以幫助進一步了解 ……
.
最後, 才是給程式設計者的參考資料:
.
| RGB 色彩空間
類似『直角座標』的方式 | HSL 色彩空間
類似『極座標』的方式 |
此外, 還有和 HSL 類似的 HSV (色相 hue, 飽和度 saturation, 明度 value), 詳情請看 :
.
一般的作法從 青色 RGB=#00FFFF 線性內差到 紅色 #FF0000, 得到的『色彩漸層』中間的部分是 灰色 #808080 | 但是, 在 HSL 色彩空間 得到的卻是彩虹般的『紅橙黃綠藍』 |
下面的圖示可以幫助理解,
HSL 色彩空間, 使用角度來表示 hue (色相)
.
把對應的 RGB 變化也一起畫出來 (在 HSL 測試頁 可以自己輸入顏色)
0: 傳統 RGB 運算方式 | (左圖) 在簡單的線性內差之下, RGB 一起變化, 產生的視覺效果並不理想 (下左, 下圖) 經過 HSL 的換算之後, RGB 依序變化, 就變得非常精彩 |
1: HSL不跨過0度 | 2: HSL 經過0度 (紅/紫色) |
.
還有一些細節, 不見得每個人都會遇到, 下面先簡單帶過, 建議到我的『HSL 測試頁』去『實際體驗』一下, 會更有感覺, 或是隨時提出來討論
擔心被搞混的人, 就不一定要往下看囉~~
| 項目 | 測試參數 |
| 任意兩個顏色, 觀察 0, 1, 2 的不同 |
|
|
|
|
.
之前在處理『相關度』和『標籤雲』的顏色時, 就在思考如何呈現出 更理想的『色彩漸層』 當時所使用的方法, 效果雖然還不錯, 但設定上比較麻煩, 也不容易理解。 所以, 除了 依相關度排序的『相關文章』功能 提到 optionRGB = […] 之外, 並沒有做太多的介紹。 |
| 這些程式, 都還沒有使用 HSL 色彩空間 來處理顏色
|
.
後來, 有機會和『標籤文章選台器』的作者 LVCHEN 討論到這方面的問題, 提到或許可以將 色座標改用 HSL (色調,飽和度,亮度), 又不約而同找到類似的 RGB <=> HSL 轉換程式 ……
現在, 在我的程式裡看到的是『改寫的 RGB <=> HSL 轉換函數』, 產生的 HSL 只適合程式內部使用。如果要用作其他用途, 建議還是參考下面的『原出處』:
.
另外, HSL 測試頁 還用到了 JavaScript Vectorgraphics Library 來繪圖
.
暫且不討論用 jQuery 來寫程式到底好不好, 因為我大概也沒有足夠的 JavaScript 資歷來討論這件事。不過, 倒是把前一陣子的『 jQuery 習作 - 隨機文章跑馬燈』改寫成不用 jQuery 的方式, 以下和大家分享。
.
最近, 自己寫的『相關文章點播台』外掛和其他功能暫告一段落, 轉而開始注意我的 Blogger 部落格的載入速度, 除了將大部分 JavaScript 加了 defer="defer" 屬性 (IE7似乎有問題), 也拿掉一些少用的 外部 JavaScript, 詳情可以參考以下的說明 :
.
再來, 把前一陣子的『 jQuery 習作 - 隨機文章跑馬燈』改寫成不用 jQuery 的方式。雖然原先 jQuery 的方式沒什麼問題, 但有了 LVCHEN 的提醒, 總是多一分準備會好一些。
...試著不用 jQuery 寫,其實對於學習 js 的幫助也不小,而且 jQuery 其實也有些 bug,太過依賴反而不好,碰到 bug 反而會花上更多時間。
.
模版修改方式、其他說明 以及 限制, 請見『 jQuery 習作 - 隨機文章跑馬燈』, 下面只列出 放在 HTML/JavaScript 網頁元素裡的 JavaScript
變數類別 :
其他注意事項 :
| jQuery 的方式 | 不使用 jQuery 的方式 (IE7 不適用, 最後面有另一版本) |
| |
.
IE7 不適用 getElementsByClassName 改寫如下 (綠色部份) :
| <script type="text/javascript"> |
不但找到合用的 JavaScript 壓縮服務 (Javascript Compressor), 同時還發現它的『特異功能』解決了我的另一個煩惱 ---- 維護『除錯版本』和『上線版本』的一致性。
於是, 壓縮的時候 會順便從『除錯版本』裡『自動拿掉除錯指令』變成『上線版本』, 而不用分成兩個檔案。
.
先簡單介紹 JavaScript 壓縮 ---- (底下借用各家的說明)
... 先「壓縮」,經過「瘦身」以後放上網路,這樣檔案會變小,使用者下載讀取的速度也會變快。... JSMin,... Packer,以及很多 Javascript Library 愛用的 Javascript Compressor,這些都可以讓你自己外掛或自行撰寫的 Javascript 達到壓縮的效果(減少不必要的字元),檔案變小、程式碼變少自然載入就會變快,這樣也是一種優化的好辦法。
http://javascriptcompressor.com/,它把原本的程式碼轉換成跟天書一樣,而且還可以測試還原回來的效果。
在javascript的壓縮,會把註解和突排刪除,甚至把程式全部變為一行。但是,將程式全部變成一行,這個問題就大了。因為如果在程式中,沒有每個敘述很嚴謹的用分號(;)來結束的話,從多行變成一行之後,程式會出錯。
Javascript Compressor 壓縮, 某些情況下,壓縮率可以接近 zip 壓縮
不過使用上需要注意 JavaScript 的語法格式, 最常遇到問題就是斷行與分號
JSLint 幫你檢查未定義的變數、函數、陳述式結尾有沒有加分號(;)、變數使用之前要先用 var 宣告、使用非數字的變數要用 === 或 !== 讓比對的時候不要自動進行轉型(Casting)、盡量不要使用 eval 函數、... 好多好多,驗證完之後會立即出一份完整的報告給你。
.
再來, 是 Javascript Compressor 的『特異功能』, 只要在行首開頭加上三個分號 (;;;), 那一整行就會在壓縮時被當做註解一樣移除,
和註解不同的是, 這些指令在『除錯版本』會被執行, 但不會出現在『上線版本』, 於是壓縮的時候 會順便從『除錯版本』裡『自動拿掉除錯指令』變成『上線版本』, 而不用分成兩個檔案。
就像底下這樣, 兩個除錯函式 debugWrite, debugWriteIf, 和呼叫它們的部份都不會出現在壓縮過的『上線版本』裡
| ;;; rpsFunc.debugWrite = function(a) { ;;; rpsFunc.debugWriteIf = function(cond, a) { rpsFunc.redrawBoard = function () { |
.
至於『除錯版本』不執行, 但『上線版本』要執行的指令則可以這樣處理 :
或
| ;;; if (!rpsDebug.jsonLocal) { |
.
前一陣子開始改良『依相關度排序的相關文章』, 現在已經進入beta 測試。
目前取的名字叫『相關文章點播台』-- RPS 1.0 (Related Posts Surf), 相較於 之前從 Abin's Tech Note 那邊修改過來的版本, 主要的不同為 :
.
真的只要一行, 就像底下這樣, 只要在載入 jQuery 之後再執行就可以。程式會找到預設的位置顯示相關文章。
| <script src="http://eucaly61-java.googlecode.com/svn/trunk/rps-10-mini.js" type="text/javascript"/> |
然後, 如果一切順利的話, 就會看到類似底下的畫面
.
如果沒有順利顯示, 或是位置不如預期, 可以加入以下的參數 :
| <script type="text/javascript"> rpsOpt.LocateBoard = ['append', '.post-footer']; </script> |
如果你的部落格網址太特別, 或是你想『顯示另一個 Blogger 部落格的相關文章』 , 或是調整每一頁的文章篇數:
| <script type="text/javascript"> rpsOpt.blogRoot = 'http://eucaly61.blogspot.com/'; </script> |
.
其中 'append', '.post-footer' 表示『顯示位置』的 CSS 設定,
如果改為 rpsOpt.LocateBoard = ['.post-footer', '.post-footer-line-1']; 則會顯示在 [B] 的位置。
| [before] <div class='post-footer'> [prepend] <p class='post-footer-line post-footer-line-1'> ... 張貼者: XXXX 位於 ... </p> [B] <p class='post-footer-line post-footer-line-2'> ... 標籤:... </p> <p class='post-footer-line post-footer-line-3'> ... 這裡不一定每個人都有內容 ... </p> [append] </div> [after] |
.
如果上面對了, 至少會顯示『載入中』

再來是定位標籤資料, rpsOpt.LocateLabels = ['.post-footer', '.post-labels', 'a']; 如果你的模版和下面不一樣, 請自行修改
| <div class='post-footer'> <p class='post-footer-line post-footer-line-1'> ... 張貼者: XXXX 位於 ... </p> <p class='post-footer-line post-footer-line-2'> <span class="post-labels">標籤: <a href="..." rel="tag">標籤名稱1</a>,... </p> <a href="..." rel="tag">標籤名稱2</a>,... </p> </span> |
.
| <script type="text/javascript"> rpsDisp.Loading = '相關文章載入中 ...'; </script> |
可以任意調換順序, 或者如果不想看到日期或相關度, 也可將 %PostRank% %PostDate% 等 拿掉。
| <style> |
替相關文章區塊上色 ...., 或 padding, margin 請依版面自行調整。
.
有問題的話, 可以試試以下的版本, 會有除錯訊息
[+/-] show/hide debug message
| <script src="http://eucaly61-java.googlecode.com/svn/trunk/rps-10-debug.js" type="text/javascript"/> <script type="text/javascript"> rpsDebug.mode = '%blog%label%jsOK%jsOK-full%'; </script> |
.
可能的問題, 或預計增加的功能
想到但不一定會做的
.
在準備改版『依相關度排序的相關文章』的過程之中, 幾乎可以確定要用 jQuery 來寫, 不過其中有一個問題, 就是如何 動態載入 不同類別標籤 的 JSON, ....
好啦, 沒有打算要用 jQuery 來寫 json-in-script 的人, 請再忍耐一下, 看完下面這一句再轉台,
json-in-script 要當作 JavaScript 來載入, 所以用 jQuery 動態載入 json-in-script, 也就是要用 jQuery 動態載入 JavaScript 的意思。
今天終於讓我試出來了, 簡單的說, 要使用 jQuery 的 $.getScript() 或 $.ajax();
.
2008-07-17 : 請見『意見』的最新訊息, 或看底下是否有新的『相關文章』
原本, 靜態呼叫 json-in-script 的方式, 像底下這樣, 其中 VB 是類別標籤的名字, 問號 ( ? ) 後面的 alt=json-in-script&callback= ... , 則是設定回傳格式為 json-in-script, 以及指定 callback function
| <script src="http://eucaly61.blogspot.com/feeds/posts/default/-/VB?alt=json-in-script&callback=RelatedLabels" type="text/javascript"/> |
再來, 要注意的是 json-in-script 和 JSON 的差別,
不信的話, 點選上面 script src= 的 http:// 連結, 就會看到如下的內容,
RelatedLabels({"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","id":{"$t":"tag:blogger.com,1999:blog-8685080495061991394"},"updated":{"$t":"2008-07-10T22:12:07.563+08:00"},"title":{"type":"text","$t":"Beyond Alternative"},"link":[{"rel":"alternate","type":"text/html","href":http://eucaly61.blogspot.com/search/label/VB}, |
.
下面列出 jQuery 載入 JavaScript 的語法,
要記得, json-in-script 要當作 JavaScript 來載入。
.
jQuery.getJSON( url, data, callback )Returns: XMLHttpRequest
Load JSON data using an HTTP GET request.jQuery.getScript( url, callback ) Returns: XMLHttpRequest
Loads, and executes, a local JavaScript file using an HTTP GET request.
.
下面是測試成功的程式,
function jsOK(a){ $(document).ready(function(){ |
其中
RelatedLabels 將 JSON 讀到陣列 (請參考上一篇),
-- 根據實驗結果, 在這個函式中就算使用 jQuery, 也無法改變頁面內容
jsOK 則是在 json-in-script 執行成功之後 由 jQuery 呼叫,
-- 根據實驗結果, 在這個函式中可以成功使用 jQuery 改變頁面內容
由此, 建議 callback 的 RelatedLabels 只要專心處理 json-in-script 的資料即可。至於頁面的資料顯示或其他需要 jQuery 的處理程序, 則留待 jsOK 再來處理
由執行結果得知, json-in-script (含 callback) 和 jsOK 會在背景執行 (非同步)。因為有遠端處理和回傳的延遲, 通常會到最後才出現結果, 而不會 夾在 "ready BEGIN" 和 "ready END" 之間。
| ready BEGIN ready END END callback : undefined / 3 2008-06-27 / [Excel 巨集] Address 函數 -- 傳回『範圍參照』 [http://eucaly61.blogspot.com/2008/06/excel-vba-address-function.html] 2008-06-04 / 我的 Excel 日記 [http://eucaly61.blogspot.com/2008/06/my-excel-diary.html] 2008-02-20 / [程式設計構想] 使用 EXCEL 巨集合併/比對/更新多種格式的通訊錄 [http://eucaly61.blogspot.com/2008/02/excel-vb-to-managecombine-contact.html] |
.
也可以使用比較低階的 $.ajax(), 它有 更多設定, 包括同步 (async: false), 非同步 (async: true) 等 ..., 不過目前試過 同步 (async: false) 並沒有看到預期的結果就是了。
$.ajax({ |
.
再來, 很奇怪的一件事, 如果使用下面這一行, 雖然成功傳值 'A' 給 jsOK, 但 json-in-script 卻沒有正確執行 (項目數為 0)
$.getScript(feedUrl, jsOK('A')); |
| ready BEGIN END callback : A / 0 ready END |
.
最後, 如果不想使用 jQuery, 那就用老方法, 例如 :
document.write, 但必需在 『網頁載入完畢之前』執行
| document.write('<script src="..." type="text/javascript"/>'); |
或者
| var s = document.createElement('script'); |
.
請看視窗底下的『隨機文章跑馬燈』, 這個算是我自己的 jQuery 習作, 不過也成功取代了載入速度不穩定的 ai-Ticker-J。
.
一般的作法都是以 RSS Feed 提供『文章資料』, 寫在程式裡則以 JSON Feed 較方便。不過, 我要用不一樣的方法, 因為『文章資料』其實很多人的頁面都有 (就在某個網頁元素/widget 裡), 可以省去抓 Feed 的時間 (估計 0.5 ~ 2 秒)。
答案在更後面, 請耐心看下去。
.
跑馬燈語法 Scrolling Text - Marquee HTML Code (英文), 簡單的說, 就是包在 <marquee> ... </marquee> 裡面, 再加上 滑鼠移到上面時會暫停。其他的設定 (速度, 方向, ...) 該處也有說明。
| <marquee onmouseover="this.stop()" onmouseout="this.start()"> 要顯示的跑馬燈文字 </marquee> |
.
固定在視窗底下的語法, 沒有專文介紹, 但是在『挖哩勒~胡說八道』那裡, 找『頁面原始碼』的 #finalfooter2 就知道囉 -- (或者看後面, 我的程式碼 <span style=... 那一長串)
這是另外一個Hack喔,跟這個無關
因為有點複雜,所以我沒有寫 (最新文章跑馬燈, 挖哩勒~胡說八道)
.
可以先看 jQuery 教學 - 基礎篇 (wmh, jsGears)
我是 jQuery 新手, 所以只簡單列出曾在 LVCHEN 那裡看過的問題
... jQuery 必須先被執行,所以不管你放在哪裡一定要放在 jQuery 之後執行 ... (標籤文章選台器 1.2 版介紹與安裝, LVCHEN)
... 阿土伯的外掛是使用 jQuery 1.1.4,問題就發生在 jQuery 1.1.4 與 1.2 版以上是部份不相容的,如果同時安裝會導致留言開關不正常,... (最新回應 2.0 來囉!, LVCHEN)
... 記得jQuery 不要裝兩次 (加強型最新回應 for blogger ..., LVCHEN)
.
你答對了嗎?
.
就是這個, 只要使用『階層式』的『網誌存檔 / BlogArchive', 文章資料就是現成的, .... 『階層式』『網誌存檔』的 HTML 原始碼 摘錄如下, 紅色部分 就是 jQuery 抓取資料的 HTML 標記, 還有我們需要的文章資料, |
<div class="widget BlogArchive" id="BlogArchive1"> |
不過, 雖然省掉了 JSON callback, 但還是有限制
.
當然, jQuery 也有自己的 方式來執行 JSON callback, 這部份留待日後再來嘗試, 有興趣的人可以參考 :
jQuery.getJSON( url, data, callback ) Returns: XMLHttpRequest
Load JSON data using an HTTP GET request.
jQuery.getScript( url, callback ) Returns: XMLHttpRequest
Loads, and executes, a local JavaScript file using an HTTP GET request.
.
先將底下的 HTML 加到 模版, 這麼做可以先『佔位置』, 讓 瀏覽器 讀入頁面時, 能正確排版。 至於位置其實沒那麼重要, 只要在 <body>...</body> 裡面即可, 例如 content-wrapper 之前。還有, 藍色部份的顏色, 請自行調整。
...
</div>
加在這裡
<div id='content-wrapper'>
...
|
.
再將底下的 JavaScript 放到 HTML/JavaScript 網頁元素裡,
|
.
其實也試過不修改模版, 而是將 綠色部分 也加在 程式中, 再用 $('body').prepend 的方式加上去, 但是只有 Firefox 可以正確顯示, IE7 則不行。
|
.
.
以下列出最近研究中的 Blogger, JavaScript, JSON, jQuery ... 的 說明 及 教學文件, 有需求的人可以從中參考。
.
.
每一個出處都有許多 Blogger 自訂/改造 的相關文章, 以下僅列出『較具代表性』的, 其他造訪各站連結。
BLOGGER HACK (Abin's Tech Note)
經典的說明都從 Abin Tech Note 開始 ...
Blogger改造之旅 (白花花)
有人開路在先, 你也可以跟著改造你的 Blogger
Blogger (挖哩勒~胡說八道, 或使用該站右側欄的『文章選台器』)
.
.
.
| http://docs.jquery.com/Core - jQurey 說明文件 | |
|
http://visualjquery.com/1.1.2.html | ![]() |
.
.
不過我猜, 說不定還得請大家投票來決定。
.
下面將介紹 :
| 另外寫了一個『不用寫程式, 不用改模版的方法』, 要先掛 jQuery, 再依文章所述安裝。目前的設計, 是要單篇文章才會顯示相關文章。對程式不熟的人, 建議使用 相關文章點播台 -- RPS 1.0 beta。 有興趣『寫程式/改模版』的人, 再看下文。 |
.
之所以沒使用下面這些, 來呈現『相關文章』, 有幾個原因 :
.
不過, 還是列出它們的效果, 說不定你用得上。
Google Ajax Feed API (Meme -- 教學與反省, .阿欣部落.) |
.
Google Ajax Search API |
.
建議大家先看一下原始版本的『相關文章』做法 (加入相關文章功能, Abin's Tech Note 2007-03-05), 或者是 替Blogger加入相關文章功能(二)(挖哩勒~胡說八道, 2008-06-30)
裡面, 詳細介紹了『相關文章』的做法, 還有程式碼要安裝在模版的什麼地方。
簡單的說, ABIN 的做法如下 :
.
再來看看我的做法, 不同之處以紅色標示 :
.
另外, 我還朝減少記憶體 (陣列) 使用量, 和減少迴圈次數的方向改寫, 所以直接就產生 集合B, 而且 集合C 也只是一個『索引』而已。這樣,『理論上』會跑快一點, 只是不知如何測試。
假設你已經安裝完成原始版本的『相關文章』([1] 或 [2]), 只要將 </head> 之前的程式碼整個換成我的版本, 就會有『依相關度排序』的效果。
.
其中的 optionRGB, 請改成適合的顏色設定
var optionRGB = [ {P: 100, R :208, G: 0, B: 0}, {P: 50, R: 255, G: 204, B: 0}, {P: 0, R: 0, G: 64, B: 128} ];
P = 百分比, (R, G, B) = 該百分比的顏色設定。如果介於兩個百分比之間, 則會使用中間色。也可以 增加 或 減少 顏色的組別, 但要維持 P (百分比) 由大到小排列, 還有注意語法即可。
| P | R | G | B |
| 100 | 208 | 0 | 0 |
| 50 | 255 | 204 | 0 |
| 0 | 0 | 64 | 128 |
.
如果不想使用顏色, 則將以下紅色部分刪去, 並注意 myRBG (內含 <span>) 和 </span> 是成對的。
myRBG = spanRGB(myP, optionRGB);
document.write('<h4>' + myRBG);
document.write('相關度 ' + myStars + ' ' + myP + '% 的文章 :</span></h4> <ul>' );
.
如果想用『分數』(例: 3/5 ) 來表示, 可以將灰色部份與前一行替換,
// document.write('相關度 ' + myStars + ' (' + relatedStar[r] + '/' + labelNum + ') 的文章 :</span> </h4> <ul>' );
.
再來是列出的文章總數, 目前是 20 則, 如藍色部分, 可以自行修改
for (var j=0; j<u_IdxNum && j<20 ; j++)
.
.
<script type='text/javascript'> function RelatedLabels(json) { function SortRelatedPosts(PostUrl) { function spanRGB(myP, PRGB) { function ShowRelatedPosts(PostUrl) { var r = 0; SortRelatedPosts(PostUrl); |
.
| 另外寫了一個『不用寫程式, 不用改模版的方法』, 要先掛 jQuery, 再依文章所述安裝。對程式不熟的人, 建議使用 相關文章點播台 -- RPS 1.0 beta。 |
.
至於『隨機文章』, 可以參考底下的做法, 將它的精神改寫到 ABIN 的程式裡面。
Blogger Feeling Lucky Widget (Random Post)
/feeds/posts/summary?max-results=0&alt=json-in-script 傳給 readLucky()
取得 文章總數, parseInt(feed.openSearch$totalResults.$t,10)
產生 亂數
將 亂數 傳給 fetchLuck()
/feeds/posts/summary?start-index=+亂數+&max-results=1&alt=json-in-script 傳給 showLucky()
秀出文章
.
原本這一篇沒打算要獨立出來的, 但是上一篇似乎有點『落落長』, 而且那麼多程式碼也不見得每個人都有興趣, 所以就把需要程式碼較少的『相關文章格中格 -- Grazr'獨立成一篇, 至少, 在我試出更好的方法之前, 會在我的『單篇文章』之後, 看到如左圖的樣子, 好幾個 Grazr『格中格』疊在一起, 裝著不同標籤的相關文章, ... |
.
請在模版加入下面的程式 (綠色部分), 我是全部加在 [B] 處
| <p class='post-footer-line post-footer-line-2'> | 找到適當地方, 放下面的程式, [A] post-footer-line-2 整個段落之後, 如上圖, 會出現在 標籤 之後 [B] post-footer-line-3 之後的 </b:includable> 之前, 會出現在 FeedFlare 之後, 意見 之前 如果你的 標籤 到 意見 之間, 並沒有 Add to funP 等 FeedFlare, 兩者的差別並不大 |
| <b:if cond='data:blog.pageType == "item"'> | |
| <div style='height: 200px; width: 90%'> | * 設定 高度 和 寬度, 可以用 絕對(px) 或 相對 (%) * expr: 將 標籤名稱 (data:label.name) 傳給 Grazr |
| </b:loop> |
.
就這樣, 再來就是調整字型和格式,
.
如果我試出更好的方法 (目標是 Google AJAX Feed API), 再請大家票選囉 !!
.
| <span class='post-labels'> <b:if cond='data:post.labels'> <data:postLabelsLabel/> <b:loop values='data:post.labels' var='label'> <a expr:href='data:label.url' rel='tag'><data:label.name/></a> <b:if cond='data:label.isLast != "true"'>,</b:if> </b:loop> </b:if> </span> | * 判斷文章是否有標籤 * 顯示『標籤:』 * 依次處理每一個標籤 * 顯示 標籤名稱(data:label.name)及 超連結('data:label.url' ) * 在標籤之間加上 逗號, 但最後一個標籤不加逗號 |
| <script type='text/javascript'> var myTotalLabel = new Array(); </script> </head> | 把這幾行放在 </head> 之前, 這樣會定義一個空的全域變數 |
| <p class='post-footer-line post-footer-line-2'> <span class='post-labels'> </p> [A] <p class='post-footer-line post-footer-line-3'/> ... </div> </div> ... [B] </b:includable> | 再找到適當地方, 放下面的程式, [A] post-footer-line-2 整個段落之後, 如上圖, 會出現在 標籤 之後 [B] post-footer-line-3 之後的 </b:includable> 之前, 會出現在 FeedFlare 之後, 意見 之前 如果你的 標籤 到 意見 之間, 並沒有 Add to funP 等 FeedFlare, 兩者的差別並不大 |
| <b:if cond='data:blog.pageType == "item"'> <div id='blogBar-bar'> <span style='color:#676767;font-size:11px;margin:10px;padding:4px;'>Loading...</span> </div> </b:if> | 我將這一段放在 [A] , 也可以選擇 [B] <b:if ...> 只有單篇文章會顯示 <div id='blogBar-bar'> ... </div> 讓 Google AJAX Search API 放置 BlogBar 的地方, |
| <b:if cond='data:blog.pageType == "item"'> <b:if cond='data:post.labels'> <b:loop values='data:post.labels' var='label'> <script type='text/javascript'> myTotalLabel.length += 1; myTotalLabel[myTotalLabel.length - 1] = '<data:label.name/>'; </script> </b:loop> <b:else/> <script type='text/javascript'> myTotalLabel.length += 1; myTotalLabel[myTotalLabel.length - 1] = "Eucaly61"; </script> </b:if> </b:if> | 可以和 [A] 放在一起 或獨立放在 [B] 這邊是重點, 將 myTotalLabel 陣列擴充, 並一次加入一個 標籤名稱 沒有標籤時, 預設的內容 |
| autoExecuteList : { executeList : ["eucaly61"] } | 原來的設定 |
| autoExecuteList : { executeList : myTotalLabel } | 重新指定 executeList |