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>
以下是一些关于引用功能相关组件的文件: