引用功能

### Movable Type 使用手册：引用功能

« 目录

- 引用功能

- 设定引用功能
- 使用引用功能
- 引用通告格式
- 参考文件

# 引用功能

Movable Type 的引用功能让不同的网志间得以施用点对点的沟通模式。想像一下你在某个用 Movable Type 所建立的网志上，写了一则关于你刚看过的电影的文章；然后另外有一个 MT 网志客读了你的文章，然后想要参考你发表的文章，也来写一则文章。虽然她可以直接对你的文章发表评论，但是这么一来，她所发表的东西就没办法保存在她自己的数据库或网站上了。

藉由引用功能，其它的网志客就可以自动发送一份通告到你的网志，指出她刚写了一则参考了你原始文章的新文章。这个机制能够实现两件事：

1. 在你自己的站台上，可以自动列出所有从你这边参考特定文章的其它站台；因此你的读者们就可以继续去阅读别的网志上的响应。

2. 此外这也能在双方的文章内容中，提供一个确实而清楚的链结；而不仅是某种像是参考日志的不明确链结，得依照其它动作（像是有人按下连往你的文章项目的链结）而定。

引用功能并不仅是针对文章项目而已，还可以拿来跟网志里的特定类别建立起链结；每当你在该类别中发表了新文章的时候，这个网址就会接到文章发表的通告。藉由这样的功能，远程的站台就可以随时盯紧其它的参考站台。

举例来说，如果你有个关于 Perl 的网站，你也许会想要陈列一份其它网志上关于 Perl 的文章的清单；这个时候如果有了引用功能，就可以让其它站台把通告送给你的网志上某个特定的类别。于是不论那个时候有新的文章被发表了，你都能够得知。

这仅仅是其中一种引用功能的用法而已；引用功能本身其实是网志间的点对点通讯架构，可以拿来追踪跨网志间的讨论，也能用来陈列远程的内文，或者是仿真出宾客授权等。实际上引用功能的技术层面相当地简单：当你想要告诉某个远程站台甚么事的时候，就送出一个通告给对方。这个通告的格式（其实是简单的 HTTP GET 需求）将在后面的段落讨论到。在 Movable Type 所采用的引用功能中，我们在类别通告里加入了密码保护，还有禁用 IP 、自动化 RSS 输出以及电子邮件通知书等功能。

就另一方面来说，我们不仅要让引用功能好用，更要让其它不是 Movable Type 的使用者也可以用。我们企图让其它的网志工具也把这样的功能整合进去，这也就是我们为什么要在后面的段落中记载著通告格式，以及为什么我们要让基本的架构尽可能的简单。如果你有任何的问题，也欢迎随时寄信给我们 (trackback@movabletype.org) 。

## 设定引用功能

如果你是 Movable Type 的新使用者，那么引用功能的卷标应该都已经在预设的模版里了，所以你一安装完 Movable Type 就应该可以开始使用这项功能了；因此你可以直接跳过下面几个步骤，直接到步骤 5 。

如果你已经是 MT 的使用者，你可能要先设定你的模版，以处理引用通告；请从步骤 1 开始读。

1. 建立一个引用清单模版。
   在列出模版中编辑引用清单模版，并且从预设的模版里开始这个模版的本体。你可以在这里找到：

       http://www.movabletype.org/default_templates.shtml#trackback

2. 更新你的样式。
   文章项目的引用通告会在某个弹出式窗口中被显示出来，就跟显示文章项目的评论清单很像。你在步骤 1 所加入的预设模版中，会用到一些 2.2 版才开始有的 CSS 样式。如果你本来用的样式是某个从 Movable Type 抓来的预设样式的话，你可以从下列这个地方找到新版的样式；请复制并贴上：

       http://www.movabletype.org/default_styles.shtml

   如果你用了自己修改过的样式，那么你可以修改引用清单模版来搭配你自己的样式，或者是在你的样式里新增 .trackback-url 、 .trackback-body 和 .trackback-post 这三个 CSS class 。

3. 在你的主索引模版中加入引用功能码。
   在你的主索引模版的 <script> 区段中加入下列程序码：

       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>

4. 在索引和汇整模版中加入引用通告数据。
   在你的主索引模版以及分类汇整模版和时序汇整模版中，直接在主要的 `<MTEntries>` 卷标之后加入下列这些卷标：

       <$MTEntryTrackbackData$>

   然后在你的单篇汇整模版里，在任何你想要的地方也加入一样的卷标：

       <$MTEntryTrackbackData$>

   当你重建的时候，这些卷标就会把必要的信息也放进你的档案里，因此 Movable Type 的小书签功能就可以加以分析，而得到这些文章项目的引用功能以及通告网址。

5. 建立可用引用功能的小书签。
   可用引用功能的小书签其实就是新版本的标准 Movable Type 小书签，其中多加了一项功能：当你用了小书签来发表到你的网志时，它会在你的浏览器里寻找目前这一页，看看里面是不是有任何文章项目可以使用引用功能。（事实上它正是在使用我们在步骤 4 所加入的卷标来取得信息）。如果有的话，小书签就会让你从那一页中启用了引用功能的文章清单中选一个，来让你发表新文章的时候同时送出通告。这一切会自然地发生，就好像你手动把通告网址填到通告网址对话盒后所发生的事一模一样。

   透过这样的功能，可以让其它站台在使用引用功能时更简单顺手。

   如果你已经在使用小书签了，那么你祇需要用跟现在一样的字段，再额外加上引用项目字段来重建它。如果你还没有在用小书签，那么你可以现在就做一个出来。

   首先到主选单，然后按下设立小书签，接著遵照祇引来建立一个新的小书签，同时确定包含了引用项目字段。

6. 这样就好了！
   现在你可以开始使用这个引用系统了。

   你可以先用你的浏览器连到下列这个网址，来测试一下你的小书签功能：

       http://www.movabletype.org/trackback/

   当你的浏览器加载这个页面之后，按一下你的 Movable Type 小书签。在它所开出的窗口里，你应该可以在最上面标示有选择要通告的引用文章项目：看到一个下拉式选单。这个选单会包含有前述页面里每一个可以使用引用功能的文章项目清单。

   如果你看到这个选单了，那么你的小书签看来就是正常运作的。也就是说，你已经可以快乐地使用引用功能罗！

   如果你没有看到那一列，那么请执行 mt-check.cgi 来检查一下你是不是有安装过 LWP::UserAgent 模块；这个模块是使用引用功能所必须要有的。

## 使用引用功能

引用功能一般有两种用法：在不同站台的文章项目间通讯，或者是在不同站台的类别间通讯。除此之外，在这两种用法里你也都可以扮演内容产生者 -- 也就是文章项目是你所发表的 -- 或扮演内容取用者 -- 也就是你会得到一分清单，上面记载著前来引用的项目（有可能会是文章项目也有可能会是类别）。

- 文章项目到文章项目通讯
  如果你是内容取用者：当你发表新文章的时候你得允许别人发送通告过来，所以要核选允许通告的核选框。引用网址会列在『引用功能』弹出式窗口中，同时也会用 <link> 卷标显示在单篇汇整里，所以可以被 Movable Type 小书签自动取得。

  如果你是内容产生者：当你发表新的文章项目时，如果你想要发出通告给其它站台上的某则文章项目，你可以用稍早我们在步骤 5 设立引用功能提到的 Movable Type 小书签，或者手动把那个站台的引用通告网址填入新增/编辑文章项目画面中的通告网址对话盒里。

- 类别到类别通讯
  如果你是内容取用者：你可以指明某个类别『允许通告』。这么做会为这个类别设立起一个引用项目，因此其它站台就可以把通告送到你的站台，让你知道有个新的文章项目呼应了这个类别。这些通告也可以显示在你的站台上，让你得以建立出这些相对应对象的集散地。

  如果你是内容产生者：你可以把一连串的引用网址连结到某个分类上，每当你在这个分类中发表新文章的时候，这些网址就都会收到来自这个新文章的引用通告。

当任何一份引用通告被送到你的站台上时，除了会被储存在 Movable Type 数据库外，系统也会更新该引用项目的 RSS 部分，然后把最后产生的 XML 档案存放在你的本机汇整路径，其档名会是 ID.xml ；这里的 ID 乃是那个引用对象的数字型 ID 。

## 引用通告格式

引用功能在通告中使用了 REST 模型，所以每一个引用项目都会有唯一的网址（因为他们的数字型 ID 互不相同）。

- 送出通告
  送往通告网址的需求是藉由 HTTP GET 所产生的，看起来通常会像这样：

      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>

## 参考文件

以下是一些关于引用功能相关组件的文件：

- 引用功能卷标
  - <MTPings> 和相关的卷标
  - <$MTEntryTrackbackCount$>
  - <$MTEntryTrackbackData$>
  - <MTEntryIfAllowPings>
  - <$MTEntryTrackbackLink$>
  - <$MTCategoryTrackbackLink$>
- 新增/编辑文章项目画面的引用字段
  - 允许通告
  - 通告网址
  - 先前送出的通告
- 编辑类别画面的引用功能字段
  - 要通告的引用网址
  - 接受送进来的引用通告
- 禁用 IP ：禁止使用者发出引用通告到你的站台
- XML-RPC 接口： mt.getTrackbackPings

Copyright © 2001-2003 Six Apart. All Rights Reserved.