2007年02月5日

部落格小玩意2: 輕鬆在文章中加入「Tag, 標籤」連結

標籤 Tag Web 部落格 JavaScript

標籤 (Tag) 是隨著網路共享書籤興起的分類與搜尋方式,其中有些共享書籤還提供了幫你產生「標籤碼」的功能,例如 Technorati 。網路上也不少標籤產生器,像《關鍵字轉Technorati標籤》、《Technorati Tag 書籤產生器》、《讓你的網誌擁有 Blog Tag》。但這些產生器不是要裝外掛,就是只產生 code ,還要部落客再自己剪貼、複製什麼的,實在是太麻煩了。我想要直接把 Tag 寫在文章中,然後讓程式自動幫我把 Tag 轉成連結。於是,就完成了這篇小玩意。


我的作法是,我只要在文章中註記 Tag 的文字, JavaScript 就會自動幫我把 Tag 轉成標籤連結。不用記複雜的語法,也不用剪貼複製,一切都是那麼順暢。這個小玩意共支援五種共享書籤系服務的 Tag 連結,分別是:黑米 HEMiDEMi, 智邦 MyShare, Yahoo 分享書籤, 國外的 del.icio.us, technorati

  1. 2007/02/05 做了一次編修: 修正 Opera 的問題。增加設定方式的說明。增加 notShowTitle 設定。
  2. 2007/02/06 做了一次編修: 第3行的測試用程式碼忘了改掉,已修正。
  3. 2007/02/09 做了一次重大編修: 取消 <tags> 語法,改用 HTML 規範的 <meta name="keywords"> 語法。原因有二:一、為了解決 Opera 無法正確處理自定HTML元素的問題;二、有助於搜尋引擎最佳化 (SEO) 。
  4. 2007/02/11 做了一次編修: 加入樂多,以「樂多」的搜尋功能作為標籤搜尋,加進標籤連結之中,加強與樂多其他部落格相關文章之聯繫。改變 window.onload 事件的觸發方式,以免與其他小工具衝突。

簡單的 Tag 語法

首先,我希望在文章中註記 Tag 的語法要很簡單,因此我規劃了兩種語法形式。第一種是用 <div>,屬性 name 要設定為 "tags" ,而 Tag 註記則寫在 <div> 區塊中。第二種是用 <meta name="keywords"> ,要把 Tag 寫在屬性 content 中,這種語法是擴展自 HTML 以 <meta> 定義文章關鍵字之應用,且瀏覽器不會將內容顯示在畫面上。是用 <tags> ,要把 Tag 寫在屬性 value 中。第二種語法是我的「自定 HTML 元素」,瀏覽器不認得,所以瀏覽器不會主動顯示在畫面上。這種自定 HTML 元素的方式,我自有其用途,雖然在這看不出作用。我寫 Tag 的方式也要很自由,只要寫單純的文字內容;可以用空格也可用逗號 (,) 分隔標籤。還有,我希望我可以在文章中任何地方放這些語法,也很可以放很多組。兩種語法的使用方式如下第4、11、15行所示。

使用 <div> 語法時,我留了個小技巧。如果第一個詞是冒號 (:) 結尾的,如上例所示,就不把它當作標籤。因為這個語法要透過 JavaScript 轉換成連結,若讀者的瀏覽器不支援 JavaScript 或者關閉了 JavaScript 時,就不會轉換了。如果我把第一個詞加上冒號,讀者透過不跑 JavaScript 的瀏覽器時,仍然會看到上面的文字內容,這樣讀者就可以看懂這些文字是 Tag 的意思,而不會覺得有一段莫明其妙的「單字」在文章中。我們也可以用 CSS 定義 Tag 的顯示外觀,因為我的標籤註記語法是 HTML 的一部份,所以只要在 CSS 中定義好樣式內容,再將樣式名稱加在語法中就可以了,如第 15 行所示。

為每一篇文章加上 Tag 連結

決定用法後,我就寫了一段 JavaScript 。樂多的用戶只要把這段 JavaScript 加在「Blog 基本設定」的「說明」欄位處。然後更新所有文章後就會生效。注意,請添加在部落格正常說明文字之後,不要把你的部落格說明漏掉了。其他系統的用戶請自己找地方加。

我的轉換動作是「就地轉換」,亦即 Tag 語法寫在什麼地方,就在什麼地方產生 Tag 連結。像上面的範例有三段 Tag 語法,就會在原地轉成三段 Tag 連結。

我列出了五種共享書籤服務的 Tag 連結的設定值,通常我們只需要留自己最常用的那一種就好了。如果五種都用,那麼就會產生五行 Tag 連結列。嘿嘿嘿。對了,不熟 JavaScript 語法者要注意逗號,最後一組設定值之後不要加逗號。而設定值的屬性意義如下列:

  • title
    必要。 Tag 連結列的標題兼識別字。
  • url
    必要。 Tag 連結的 URL 格式。
  • icon
    選擇性屬性。顯示在 Tag 連結列最前面的圖像 URL 。
  • linkClassName
    選擇性屬性。 Tag 連結列之 a HTML標籤的 CSS class 名稱。這讓我們可以為不同的書籤服務設定不同的顯示樣式。
  • notShowTitle
    選擇性屬性。不在 Tag 連結列前顯示 title (文字) 。如果你只想用顯示圖像 (icon) ,不要文字,則設定此屬性為 true

這段語法也可以和我的另一個小玩意《為部落格加上「加入xx分享書籤」的按鈕》一起用。對了,如果各位有其他的網頁空間可以放檔案,那麼可以參考丸小管在《為樂多加入收藏按鈕》的作法,把這些程式碼放到外部的檔案中。


Posted by shirock at 樂多Roodo! │01:45 │回應(4)引用(3)JavaScript
樂多分類:網路/3C 共同主題:部落格小玩意 工具:加入樂多書籤編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2696868
引用列表:
部落格小玩意2 在黑米書籤中已經有38人收藏了
部落格小玩意2 在黑米書籤中經38人收藏,網摘果然是 Web 2.0 時代分享知識的好方式【石頭閒語】 at 2007年02月9日 01:12
我這篇的小玩意會彙整部落客最近發表在自己部落格中的文章之 Tag ,然後在首頁的邊欄顯示自己部落格的 Tag Cloud 。
部落格小玩意3: 在首頁加入自己最近發表文章的 Tag Cloud【石頭閒語】 at 2007年02月11日 17:01
function showcode() { var a=''; var x=document.tagsform.idin.value; var t=document.tagsform.tagin.value; if(!x) { alert("還沒有填入帳號") return } if(!t) { alert("還沒有填入tags") return } var t
del.icio.us標籤產生器公用版【Tiat的生活寫‧照】 at 2007年04月7日 07:00
回應文章
哇~看的眼睛都"揮企"哩, 看來得好好仔細研究一下,感謝您辛苦的研究與分享! 3Q ^_^y
Posted by 林北大尾 at 2007年02月8日 10:05
傷腦筋, Opera 處理自定HTML元素 <tags> 的問題比我預想的還麻煩。本來因為已經解決了,實際上跟其他 javascript 的程式碼一合起來還是會出問題。

雖然 Opera 的使用者不多,但我也不想放棄。再讓我想想要如何解決。

建議使用本工具的網友,儘量用 <div name="tags"> 的語法註記 Tag 。
Posted by 遊手好閒的石頭成 at 2007年02月9日 01:17
你的方法真是太棒了,我的只是新手的笨方法。^^

不過我還是得用我的笨方法...Orz
因為我會先存入del.icio.us然後再複製tags去我的產生器產生html。這樣我可以直接點選我之前下過的tags,而不用自己輸入。

不知道這能不能有比較方便的解決方式?(我自己是沒辦法啦,不會寫程式...Orz)
Posted by Tiat at 2007年04月7日 03:28
目前也只能做到這樣,這以上的能力要等樂多提供標籤功能囉。
Posted by 遊手好閒的石頭成 at 2007年04月7日 11:09