Movable Type 的引用功能讓不同的網誌間得以施用點對點的溝通模式。想像一下妳在某個用 Movable Type 所建立的網誌上,寫了一則關於妳剛看過的電影的文章;然後另外有一個 MT 網誌客讀了妳的文章,然後想要參考妳發表的文章,也來寫一則文章。雖然她可以直接對妳的文章發表評論,但是這麼一來,她所發表的東西就沒辦法保存在她自己的資料庫或網站上了。
藉由引用功能,其他的網誌客就可以自動發送一份通告到妳的網誌,指出她剛寫了一則參考了妳原始文章的新文章。這個機制能夠實現兩件事:
引用功能並不僅是針對文章項目而已,還可以拿來跟網誌裡的特定類別建立起鏈結;每當妳在該類別中發表了新文章的時候,這個網址就會接到文章發表的通告。藉由這樣的功能,遠端的站台就可以隨時盯緊其他的參考站台。
舉例來說,如果妳有個關於 Perl 的網站,妳也許會想要陳列一份其他網誌上關於 Perl 的文章的清單;這個時候如果有了引用功能,就可以讓其他站台把通告送給妳的網誌上某個特定的類別。於是不論那個時候有新的文章被發表了,妳都能夠得知。
這僅僅是其中一種引用功能的用法而已;引用功能本身其實是網誌間的點對點通訊架構,可以拿來追蹤跨網誌間的討論,也能用來陳列遠端的內文,或者是模擬出賓客授權等。實際上引用功能的技術層面相當地簡單:當妳想要告訴某個遠端站台甚麼事的時候,就送出一個通告給對方。這個通告的格式(其實是簡單的 HTTP GET 需求)將在後面的段落討論到。在 Movable Type 所採用的引用功能中,我們在類別通告裡加入了密碼保護,還有禁用 IP 、自動化 RSS 輸出以及電子郵件通知書等功能。
就另一方面來說,我們不僅要讓引用功能好用,更要讓其他不是 Movable Type 的使用者也可以用。我們企圖讓其他的網誌工具也把這樣的功能整合進去,這也就是我們為什麼要在後面的段落中記載著通告格式,以及為什麼我們要讓基本的架構盡可能的簡單。如果妳有任何的問題,也歡迎隨時寄信給我們 (trackback@movabletype.org) 。
如果妳是 Movable Type 的新使用者,那麼引用功能的標籤應該都已經在預設的模版裡了,所以妳一安裝完 Movable Type 就應該可以開始使用這項功能了;因此妳可以直接跳過下面幾個步驟,直接到步驟 5 。
如果妳已經是 MT 的使用者,妳可能要先設定妳的模版,以處理引用通告;請從步驟 1 開始讀。
http://www.movabletype.org/default_templates.shtml#trackback
http://www.movabletype.org/default_styles.shtml
如果妳用了自己修改過的樣式,那麼妳可以修改引用清單模版來搭配妳自己的樣式,或者是在妳的樣式裡新增 .trackback-url 、 .trackback-body 和 .trackback-post 這三個 CSS class 。
function OpenTrackback (c) { window.open(c, 'trackback', 'width=480,height=480,scrollbars=yes,status=yes'); }
然後在妳的 <MTEntries> 標籤裡面,加入這些東西來讓每一則文章項目都顯示引用功能清單的鏈結:
<MTEntryIfAllowPings> | <a href="<$MTCGIPath$>mt-tb.cgi?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">TrackBack (<$MTEntryTrackbackCount$>)</a> </MTEntryIfAllowPings>
<MTEntries>
標籤之後加入下列這些標籤:
<$MTEntryTrackbackData$>
然後在妳的單篇彙整模版裡,在任何妳想要的地方也加入一樣的標籤:
<$MTEntryTrackbackData$>
當妳重建的時候,這些標籤就會把必要的資訊也放進妳的檔案裡,因此 Movable Type 的小書籤功能就可以加以分析,而得到這些文章項目的引用功能以及通告網址。
透過這樣的功能,可以讓其他站台在使用引用功能時更簡單順手。
如果妳已經在使用小書籤了,那麼妳祇需要用跟現在一樣的欄位,再額外加上引用項目欄位來重建它。如果妳還沒有在用小書籤,那麼妳可以現在就做一個出來。
首先到主選單,然後按下設立小書籤,接著遵照祇引來建立一個新的小書籤,同時確定包含了引用項目欄位。
妳可以先用妳的瀏覽器連到下列這個網址,來測試一下妳的小書籤功能:
http://www.movabletype.org/trackback/
當妳的瀏覽器載入這個頁面之後,按一下妳的 Movable Type 小書籤。在它所開出的視窗裡,妳應該可以在最上面標示有選擇要通告的引用文章項目:看到一個下拉式選單。這個選單會包含有前述頁面裡每一個可以使用引用功能的文章項目清單。
如果妳看到這個選單了,那麼妳的小書籤看來就是正常運作的。也就是說,妳已經可以快樂地使用引用功能囉!
如果妳沒有看到那一列,那麼請執行 mt-check.cgi 來檢查一下妳是不是有安裝過 LWP::UserAgent 模組;這個模組是使用引用功能所必須要有的。
引用功能一般有兩種用法:在不同站台的文章項目間通訊,或者是在不同站台的類別間通訊。除此之外,在這兩種用法裡妳也都可以扮演內容產生者 -- 也就是文章項目是妳所發表的 -- 或扮演內容取用者 -- 也就是妳會得到一分清單,上面記載著前來引用的項目(有可能會是文章項目也有可能會是類別)。
如果妳是內容產生者:當妳發表新的文章項目時,如果妳想要發出通告給其他站台上的某則文章項目,妳可以用稍早我們在步驟 5 設立引用功能提到的 Movable Type 小書籤,或者手動把那個站台的引用通告網址填入新增/編輯文章項目畫面中的通告網址對話盒裡。
如果妳是內容產生者:妳可以把一連串的引用網址連結到某個分類上,每當妳在這個分類中發表新文章的時候,這些網址就都會收到來自這個新文章的引用通告。
當任何一份引用通告被送到妳的站台上時,除了會被儲存在 Movable Type 資料庫外,系統也會更新該引用項目的 RSS 部分,然後把最後產生的 XML 檔案存放在妳的本機彙整路徑,其檔名會是 ID.xml ;這裡的 ID 乃是那個引用物件的數字型 ID 。
引用功能在通告中使用了 REST 模型,所以每一個引用項目都會有唯一的網址(因為他們的數字型 ID 互不相同)。
http://foo.com/mt/mt-tb.cgi?tb_id=ID
這裡的 ID
也就是該引用項目的數字型 ID 。然後在這個網址尾端再附加上其他需求參數,就像這樣:
http://foo.com/mt/mt-tb.cgi?tb_id=ID&title=標題&url=網址
之類的。可能會用到的查詢參數包括有: title (項目標題)、
excerpt (項目的文摘;如果超過 255 個字的話,就會被刪到祇剩下 255 個字,然後後面再加上 ...
)、 url (項目的靜態鏈結)還有 blog_name (文章項目發表處的網誌名稱)。
通告的回應會以簡單的 XML 格式來表示,來啟用應用程式等級的錯誤偵測(例如 HTTP 等級的錯誤就會在此被傳回:如果某個引用網址指向伺服器上不存在的位置,那麼這個通告就會傳回一個 404
錯誤)。
成功的通告會得到像是這樣的回應:
<?xml version="1.0" encoding="iso-8859-1"?> <response> <error>0</error> </response>
失敗的通告則會得到這樣的回應:
<?xml version="1.0" encoding="iso-8859-1"?> <response> <error>1</error> <message>The error message</message> </response>
當然,其他程式可能會逐漸加入其他需要的欄位,但是這個回應的 XML 結構應該都要保持一致。
http://foo.com/mt/mt-tb.cgi?tb_id=ID&__mode=rss
這裡所用到的 ID
也是引用項目的數字型 ID 。
這種需求的回應可能是跟前面提到的需求相同格式的錯誤訊息,也有可能是一連串用 RSS 排版過的引用通告清單,並且被包在 <response>
標籤裡。
例如:
<?xml version="1.0" encoding="iso-8859-1"?> <response> <error>0</error> <rss version="0.91"><channel> <title>TrackBack Test</title> <link>http://this.is/the/trackback/item/link/</link> <description>Description of the TrackBack item</description> <language>en-us</language> <item> <title>TrackBack Demo</title> <link>http://this.is/the/permalink/</link> <description>Excerpt</description> </item> </channel> </rss></response>
以下是一些關於引用功能相關元件的文件: