Movable Type 完全手册:第九章 ─ 模版

« 目录


第九章 ─ 模版

这一章的份量相当之多,前半段是比较抽象的论述以及注意事项,著重在观念的厘清,接著是把这一章范围内的使用者接口快速描述一遍;由于本章涉及大量的 HTML 码,所以将不会以逐步骤抓图的方式解说,否则将把篇幅拖得过于冗长。而后半段则主要是摘录改写自官方文件里的数据。虽然本章对于初学乍练的读者来说会比较难以吸收,但是对于稍微有些基础的读者来说,却应该是相当丰富而实用的数据。

模版结构

Movable Type 的模版能力恐怕正是其强大之处了。这套系统使得网志的「内容」可以跟「形式」抽离;当你在修改版面安排(形式)的时候,完全不会影响到内容;反之亦然。然而在 Movable Type 的预设模版里,又更进一步地使用了 CSS ,把这个「形式」又拆解成「顺序结构」跟「效果」;前者是 HTMLXHTML 的部分,后者则是 CSS 的部分。藉由这样的拆解,你可以重新安置页面中的各个组件,而不改变每个组件的呈现效果;也可以重新设计每个组件的呈现效果,而不会改变页面组件的安置。

像是这样的设计理念,有一个说法称做「模块化」,强调各自独立的合作关系,不会一个地方烂掉就全部烂光光。而这也是你在规划模版的时候所该记在心里面的。

以下我们要讨论的事情大概都发生在模版编辑画面里,任何时候你都可以如图一按下左方工具列上的「模版」按钮,就可以开始把玩模版了。

按下「模版」按钮
图一:按下左方工具列的「模版」按钮。

接下来让我们一一仔细察看:

索引模版

列出模版画面的第一区里,列出的是索引模版。你可以点击模版名称字段里的任何一个,就能够加以编辑该模版,或者调整跟该模版有关的设定;另外在这个画面里还会标示出各个模版所会输出的档案名称,也注明它们会不会在重建索引模版的时候一并被自动重建。当然你还可以利用删除核选框以及删除按钮来删除不再使用的模版,或者是点击「建立新的索引模版」链结来新增新的索引模版。

索引模版
图二:索引模版。
模版名称
图三:索引模版的模版名称。
输出档案
图四:索引模版的输出档案信息。
是否重建的信息
图五:索引模版是否重建的信息。
删除核选框及删除按钮
图六:索引模版的删除核选框及删除按钮。
「建立新的索引模版」链结
图七:「建立新的索引模版」链结。

当你新增或编辑索引模版的时候,首先能够修改这个模版的模版名称,这个名称祇是用来显示用的,所以你甚至可以把好几个模版都取做相同的名字 ─ 祇要你自己不会弄混就好。

除此之外你也可以修改输出档案的档名,这个设定就很重要了;由索引模版所产生出来的档案会被放在本机站台路径底下,档案名称就是你在此所设定的名称,其它读者则可以由站台网址来读取这个档案。一旦你修改了这一栏的设定值,原先的档案并不会消失,但是更新过后的档案却会使用你新设定的名称;这意味著你得记得一并修改相关的其它档案或模版,读者们(或搜寻引擎)才不会祇看到老旧不更新的档案。

接下来还有一个「重建索引模版时自动重建此模版」的核选框,预设是核选著的,表示每当你的索引模版需要更新(像是新增了文章、或储存了文章修改)时,这个模版也会被一并重建成档案。如果你的模版并不会跟文章扯上关系,例如祇是单纯的样式表,那么你大可取消核选这个核选框,如此一来就可以减少系统每次需要重建的档案数量,而降低系统负担。

将此模版连结到档案」是一个进阶的功能,让你把这个模版内容实际存放到服务器上的某个档案;藉由这个功能,你就能够让好几份网志使用完全相同的模版,而且它们也都会同步更新。不过这个功能也很有可能相当具有危险性 ─ 因为你可以以此开启系统里的某个特定档案,并且加以修改覆写。如果你没有这么复杂的需求,也不懂系统上各个目录里的东西的话,建议你还是空著别动。

最大的那一个字段就是实际的模版内容了。你可以在此任意地编辑修改模版内容。一旦你修改了模版内容或者是上述的其它字段后,别忘了还要按下「储存」按钮,才会把你所做的变更储存回数据库;接著你还得按下「重建」按钮,才能以更新过的模版内容,制作新的静态页面档案。

模版名称
图八:可加以编辑的「模版名称」字段。
输出档案
图九:可加以修改的「输出档案」字段。
「重建索引模版时自动重建此模版」核选框
图十:「重建索引模版时自动重建此模版」核选框。
「将此模版连结到档案」字段
图十一:「将此模版连结到档案」字段。
模版本体
图十二:模版本体。
「储存」按钮
图十三:「储存」按钮。
「重建」按钮
图十四:「重建」按钮。

Movable Type 预设的主索引模版里,除了提供几个不同版本及功能的 RSS 模版之外,还有两个可以用 CSS 调整版面的 HTML/XHTML 模版,分别是主索引模版以及总汇整索引模版。当然还少不了那个用来调整版面的 CSS 模版:样式表模版。

首先我们要来讲讲这个 HTML/XHTML 的部分。虽然说,有了 CSS 之力,你可以随意地安置各个组件,几乎可以不要考虑他们的先后关联,都有办法做出整齐漂亮的版面;但是在这里仍旧要强调,逻辑清晰的 HTML/XHTML 才是建构优良页面的基础

为什么呢?有几个主要原因:

切记,编撰 HTML/XHTML 模版的时候,你应当扬弃以往使用表格来排版的方式,而把排版的工作留给 CSS 来处理。表格应该祇在真的是「表格」的情况下才使用。

撰写 HTML/XHTML 模版的时候,你可能会需要具备基本的 HTML/XHTML 能力,另外可以参考 Movable Type 使用手册:模版卷标来插入其它 MT 卷标;如果你之前也有使用过其它的网志系统或者出版管理系统,而且也用那些系统制作过模版的话,你也许会想参考一下 Movable Type 模版;这份文件里有对于不同系统间模版差异的解释,也有著简单的模版作用机制说明,对于编撰模版来说,一定有所帮助。

如果想要做出比好还要好的 HTML/XHTML 模版,也应该留意 Accessibility(亲和力/无障碍) 的议题。你可以看一下 W3C Web Accessibility Initiative 的内容(有人正在把它翻译成中文版);另外也有几份不错而简短的文件该读一读,像是我跟 hlb 翻译完的 Dive Into Accessibility (深入亲和力)就是一本分量轻薄的小书,可以帮助你在三十天内让 Movable Type 做出来的网页更棒。

当你写出 HTML/XHTML 模版后,也可以用 W3C MarkUp Validation Service 来验证看看是不是有语法上的瑕疵;通常要修改这些瑕疵都会耗上大量的时间精力,但是却可以帮助你把 HTML/XHTML 写得更合逻辑;事实上,这也可以锻鍊你的 HTML/XHTML 功力。

CSS 是另外一门大学问;举凡字形变化、边框留白、颜色图片乃至于光标音效,都几乎可以透过 CSS 来达成。除此之外,可重复利用也是另一个 CSS 的特色;祇要你规划得当,就可以让同一类的 HTML/XHTML 组件去取用相同的属性变化,毫不罗唆。

网络上可以找到的中文 CSS 相关文件不特别多,不过你可以从 hlb 翻译的CSS实务排版技巧、秘诀与技术开始著手。大致上当你一开始祇能够修改既有的 CSS 档案时,你可以这么做:

另外一个 CSS 的重点是在于栏框的阶层。 CSS 中任何组件预设都是「占满可用空间」的,如果你要更动占用空间的尺寸、位置的话,就得留意这个「页(page) ─ 格(box) ─ 栏(margin) ─ 框(border) ─ 留白(padding) ─ 内容物」的先后关系:

通常当你很高兴地安排完一整套的 CSS 栏框排版之后,很有可能出乎意料(或意料之中?)地发现,浏览器所画出来的样子跟你原先所设想的完全不同!所以在尝试及除错的阶段,你可以先暂时地使用粗而明显的边框,来观察看看到底浏览器把你的栏框放到哪里去了。以下是一个除错用边框的范例:

border: red solid 10px;

你可以等位置摆对了之后,再把这个边框改回你想要的样子(或者把它去掉,如果你不想要有边框的话)。

大致说来,你可以任意地把玩 CSS 的各种属性,无须担心会损毁你的内容跟架构。所以,尽情享乐吧!

当你写出 CSS 模版后,也可以用 W3C CSS Validation Service 来验证看看是不是有语法上的瑕疵。好消息是,这应该会比 HTML/XHTML 的验证容易通过得多了。

另外还有一个坏消息:目前号称市场占有率最高的 IE 实际上对于 W3C CSS 的实做程度却最低;所以你可能祇需要花 20% 的时间就可以做出漂亮的版面,却要再花上 80% 的时间来处理 IE 的兼容性。事情当然还可以更糟,几个月前微软的 IE 团队表示,三年内将不会有任何 IE 的更新档出现,因此这些问题在接下来的几年内也都不会被解决掉。

额外给华文世界使用者的信息: KKMan 的结果会更糟。

至于 RDF 的用途是用来描述你所能够提供给其它人的信息有哪些用的。透过 RDF 的架构,你才可以使用 RSS 来跟其它站台串联汇整。

如果你对此毫无理解,那倒也没有关系;因为 MT 内附的 RDF 模版其实已足堪用了。你唯一应当注意的事情是,确定里面关于内容语言的描述是否正确。如果你的网志内容是繁体中文,请确定你用了 <dc:language>zh-tw</dc:language>(RSS 1.0) 或 <language>zh-tw</language>(RSS 0.91)。

至于更深入的细节,则建议可以参考一下 Resource Description Framework (RDF) / W3C Semantic Web Activity 以及 RDF Site Summary (RSS) 1.0

实际上 RDF 的门派版本相当分歧杂乱,真的打算开始摸索的朋友恐怕得先有点心理准备才行。

汇整相关模版

列出模版画面的第二区里,列出的是汇整相关模版。你可以点击模版名称字段里的任何一个,就能够加以编辑该模版;你也可以利用删除核选框以及删除按钮来删除不再使用的模版,或者是点击「建立新的汇整模版」链结来新增新的汇整相关模版。

汇整相关模版
图十五:汇整相关模版。
模版名称
图十六:模版名称。
删除核选框及删除按钮
图十七:删除核选框及删除按钮。
「建立新的汇整模版」链结
图十八:「建立新的汇整模版」链结。

当你新增或编辑汇整相关模版的时候,首先能够修改这个模版的模版名称,这个名称祇是用来显示用的,所以你大可把好几个模版都取做相同的名字 ─ 祇要你自己不会弄混就好。

跟索引模版不同的地方在于你并不能修改输出档案的档名,各种汇整档案的档名是在网志组态的画面里设定的,请参考第八章的介绍。

将此模版连结到档案」是一个进阶的功能,让你把这个模版内容实际存放到服务器上的某个档案;藉由这个功能,你就能够让好几份网志使用完全相同的模版,而且它们也都会同步更新。不过这个功能也很有可能相当具有危险性 ─ 因为你可以以此开启系统里的某个特定档案,并且加以修改覆写。如果你没有这么复杂的需求,也不懂系统上各个目录里的东西的话,建议你还是空著别动。

最大的那一个字段就是实际的模版内容了。你可以在此任意地编辑修改模版内容。一旦你修改了模版内容或者是上述的其它字段后,别忘了还要按下「储存」按钮,才会把你所做的变更储存回数据库。

「模版名称」字段
图十九:可加以编辑的「模版名称」字段。
「将此模版连结到档案」字段
图二十:「将此模版连结到档案」字段。
模版本体
图二十一:模版本体。
「储存」按钮
图二十二:「储存」按钮。

Movable Type 一开始就提供的三个汇整相关模版分别是分类汇整模版、单篇汇整模版和按时汇整模版。顾名思义,前两个模版分别是拿来给分类汇整以及单篇汇整用的,而第三个模版则可以适用于逐月汇整、逐周汇整以及逐日汇整

其它模版

列出模版画面的第三区里,列出的是其它模版。你可以按下各个模版前面的编辑按钮,来加以编辑该模版;这一区的模版都有特定的功能,因此你既不能删除任何一个,也无法新增这类的模版。

其它模版
图二十三:其它模版。
其它模版的「编辑」按钮
图二十四:其它模版的「编辑」按钮。

这一类的模版都是固定的,因此你也不能够更改各个模版的名称 ─ 它们从存在之时就被赋予特殊的用途了,因此你不能随意地修改。

将此模版连结到档案」是一个进阶的功能,让你把这个模版内容实际存放到服务器上的某个档案;藉由这个功能,你就能够让好几份网志使用完全相同的模版,而且它们也都会同步更新。不过这个功能也很有可能相当具有危险性 ─ 因为你可以以此开启系统里的某个特定档案,并且加以修改覆写。如果你没有这么复杂的需求,也不懂系统上各个目录里的东西的话,建议你还是空著别动。

最大的那一个字段就是实际的模版内容了。你可以在此任意地编辑修改模版内容。一旦你修改了模版内容或者是上述的其它字段后,别忘了还要按下「储存」按钮,才会把你所做的变更储存回数据库。

「模版名称」不能加以编辑
图二十五:「模版名称」是固定的,无法加以编辑。
「将此模版连结到档案」字段
图二十六:「将此模版连结到档案」字段。
模版本体
图二十七:模版本体。
「储存」按钮
图二十八:「储存」按钮。

这里总共有五个模版。回响清单模版是用来制作动态回响清单的模版;回响预览模版所制作的动态页面,也就是读者预览她们即将发表的回响时,所看到的页面;回响出错模版则会决定当读者发表评论出错的时候,要看到的错误讯息页面的样子;引用清单模版则是用来制作列出某篇文章的引用清单的动态页面的模版;至于弹出已上传图片模版则是搭配上传图片并做成弹出式图片的功能的模版。

模版模块

列出模版画面的最后一区里,列出的是模版模块。你可以点击模版名称字段里的任何一个,就能够加以编辑该模版;你也可以利用删除核选框以及删除按钮来删除不再使用的模版,或者是点击「建立新的模版模块」链结来新增新的模版模块。

模版模块
图二十九:模版模块。
模版模块的「模版名称」字段
图三十:模版模块的「模版名称」字段。
没有内容的,模版模块的删除核选框及删除按钮
图三十一:模版模块的删除核选框及删除按钮,现在因为没有东西,所以你看不到核选框。
「建立新的模版模块」链结
图三十二:「建立新的模版模块」链结。

当你新增或编辑模版模块的时候,你也能够修改这个模版的模版名称,这个名称却不祇是用来显示用而已,它们都会被拿来用于 <MTInclude> 卷标module 属性,所以你最好乖乖祇使用英文字母跟数字来当作模版名称,而且连特殊符号也避免使用会比较好。当然名称也就不能重复使用了。

将此模版连结到档案」是一个进阶的功能,让你把这个模版内容实际存放到服务器上的某个档案;藉由这个功能,你就能够让好几份网志使用完全相同的模版,而且它们也都会同步更新。不过这个功能也很有可能相当具有危险性 ─ 因为你可以以此开启系统里的某个特定档案,并且加以修改覆写。如果你没有这么复杂的需求,也不懂系统上各个目录里的东西的话,建议你还是空著别动。

最大的那一个字段就是实际的模版内容了。你可以在此任意地编辑修改模版内容。一旦你修改了模版内容或者是上述的其它字段后,别忘了还要按下「储存」按钮,才会把你所做的变更储存回数据库。

「模版名称」字段
图三十三:可加以修改的「模版名称」字段。
「将此模版连结到档案」字段
图三十四:「将此模版连结到档案」字段。
模版本体
图三十五:模版本体。
「储存」按钮
图三十六:「储存」按钮。

一开始 Movable Type 并没有提供任何预先建立好的模版模块的,这是因为 Movable Type 希望一开始不要把事情弄得太复杂 ─ 可不是每个人都能够无痛接受「模版」的观念。但是随著你的模版越写越复杂,你会开始发现有一些重复的片段反覆出现在多个模版里,这时候就是「模版模块」派上用场的时候了。

你可以把这些完全相同的片段抽出来,放到模版模块里,再把 <MTInclude> 卷标放进原来这些片段会出现的地方。从此之后你祇要修改这个模版模块,再重建所有的档案,就可以一次更新众多模版以及跟它们有关的静态页面档案。

这么一来,无论是要维护更新模版或是挪动各个组件在某个模版里的顺序,都将无比容易。

搜寻模版

搜寻模版跟 Movable Type 里的其它模版管理起来并不同,因为他们并非依网志为准的,所以放在编辑选单的『模版』区段中反而没有意义。搜寻模版实际上是一些放在你的 search_templates/ 目录中的档案;这个目录应该会跟 mt.cgi 位于同一个位置。

对于 Windows 的使用者来说,这些搜寻模版应该位于像是 C:\Program Files\OurInternet\Movable Type\mt\search_templates\ 的数据夹里面;对于 UN*X 的使用者来说,则可能位于像是 /usr/local/www/cgi-bin/mt/search_templates/ 的路径里。

在你的搜寻模版中,你可以用一些特殊的模版卷标集合来显示搜寻结果。不过你几乎也可以用其它的 Movable Type 卷标;不过当然你还是得要尊重整体的脉络。除此之外,因为你的搜寻结果页面是动态随著每一次有人搜寻你的站台时所产生的,所以你应该要避免使用那些会消耗服务器大量资源来重建的卷标(像是 <MTArchiveList><MTCalendar> )。

你也可以在你的搜寻模版中使用 <MTInclude> 卷标,来包含某个搜寻模块或外部档案。你甚至可以把某个网志当作是前后文(因为模版模块会依各个网志而存),然后在 <MTSearchResults> 容器之外这么用这个卷标。不过我们仍然要警告你不要轻易使用这种方法,尤其是你有多重网志的时候更是如此。例如说,如果你在某个模版中用了

<$MTInclude module="Header"$>

那么系统就会知道它所要找的模块名为 Header 。如果搜寻结果是找到了,会很简单地把网志按照字母顺序列出;反之要是没有找到, Movable Type 就会试著从你的数据库里加载某个网志(被选择的网志则没有定义)。

在 Movable Type 的预设模版中包含有一个简单的搜寻表单来搜寻你的站台,它看起来像这样:

<form method="get" action="<$MTCGIPath$><$MTSearchScript$>">
<label for="search" accesskey="4">搜寻本站:</label><br />
<input id="search" name="search" size="20" /><br />
<input type="submit" value="搜寻" />
</form>

至于显示所有选项的搜寻表单,看起来可能会像这个样子:

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">
<input size="30" name="search" value="<$MTSearchString$>" />
<input type="submit" value="Search" /><br />
<input type="checkbox" name="CaseSearch" /> 大小写吻合
<input type="checkbox" name="RegexSearch" /> 使用正规表示式<br />
<b>搜寻范围:</b>
<input type="radio" name="SearchElement" value="entries" /> 祇有文章项目
<input type="radio" name="SearchElement" value="comments" /> 祇有评论
<input type="radio" name="SearchElement" value="both" /> 文章项目和评论 <br />
<b>排序字段:</b>
<select name="SearchSortBy">
<option value="created_on">发表日期</option>
<option value="title">标题</option>
</select><br />
<b>排序方式:</b>
<select name="ResultDisplay">
<option value="ascend">递增</option>
<option value="descend">递减</option>
</select><br />
<b>排除下列网志:</b>
<MTBlogs>
<input type="checkbox" name="ExcludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />
<b>从下列时间范围内搜寻文章项目:</b>
<select name="SearchCutoff">
<option value="9999999">从头开始</option>
<option value="7">从一周前开始</option>
<option value="14">从两周前开始</option>
<option value="30">从一个月前开始</option>
<option value="60">从两个月前开始</option>
<option value="90">从三个月前开始</option>
<option value="365">从一年前开始</option>
</select><br />
<b>每份网志的搜寻结果上限:</b>
<select name="MaxResults">
<option value="5">5</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="9999999">无上限</option>
</select>
</form>

这个搜寻表单就可以提供使用者更多改变搜寻参数的控制变项,让她们得以指定像是大小写吻合的属性,或者是以正规表示式来进行搜寻,而非仅祇用布林字符串查询。搜寻也可以被限定在仅祇有项目或评论内(也可以两者均是),请注意,评论搜寻会比文章项目搜寻花去更多的时间和资源。

上面的表单同时也让使用者在搜寻时可以排除特定的网志,对于那些祇想要搜寻某几个网志的读者来说会很好用。另一个替换排除网志的作法像这样:

<b>包含下列网志:</b>
<MTBlogs>
<input type="checkbox" name="IncludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />

基本上这就是跟排除网志完全相反的作法,不过你当然有可能因为任何理由而改采这一种作法。例如说,这样的作法就可以让你祇搜寻特定的网志,而不需要列出一堆要排除掉的网志。你祇需要把这一段加进表单里:

<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />

<$MTBlogID$> 总是对应到现用的网志,所以这个搜寻祇会被限制在目前被浏览的网志里。

上面的范例是一个直接搜寻的例子,完整的新评论搜寻表单看起来应该像这样:

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">
<input type="hidden" name="Type" value="newcomments" />
<b>排除下列网志:</b>
<MTBlogs>
<input type="checkbox" name="ExcludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />
<b>从下列时间范围内搜寻文章项目:</b>
<select name="CommentSearchCutoff">
<option value="9999999">从头开始</option>
<option value="7">从一周前开始</option>
<option value="14">从两周前开始</option>
<option value="30">从一个月前开始</option>
<option value="60">从两个月前开始</option>
<option value="90">从三个月前开始</option>
<option value="365">从一年前开始</option>
</select><br />
<b>文章项目搜寻结果上限:</b>
<select name="MaxResults">
<option value="5">5</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="9999999">无上限</option>
</select><br />
<input type="submit" value="寻找新回响" />
</form>

如果你准备了多个不同的搜寻模版,那么首先你得用任何文字编辑器开启你的 mt.cfg 档案,然后用 AltTemplate 指令来组态替换模版。例如说,如果你有两份网志( WorkPlay ),而且你想要让你的网志有自己的模版,你可能会加上这些东西:

AltTemplate work work.tmpl
AltTemplate play play.tmpl

接下来你还得修改既有网志的模版,让它们在建造搜寻页面的时候也使用特定模版;你可以用一个隐藏的表单输入。例如说你就可以把下列的搜寻表单加入你的 Work 网志:

<input type="hidden" name="Template" value="work" />

注意:如果你祇想要把搜寻范围限定在祇有一个网志内,你也许也会想要在表单里加上:

<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />

同样地,别忘了在你的搜寻模版里也应该做类似的调整,否则当使用著接下去搜寻的时候,就会发现搜寻结果页面的样子又变了!

模版卷标

以下我们将先为各位概略描述用于 Movable Type 的模版卷标。

模版和卷标哲学

在 Movable Type 的模版卷标背后,有两个主要的概念:

祇要你掌握住这两个概念,所有的卷标对你来说就都不是难题了。

卷标种类

Movable Type 的模版卷标可以分为两类 ─ 容器和变数:

容器卷标

有些 MT 卷标是『容器』卷标,里面可能装有被称为子模版的东西;其实就是一些文字片段和 MT 卷标,然后被包在另外两个 MT 卷标:容器的开头和容器的结尾之间。举例来说,如果有个叫做 <MTFoo> 的卷标,那么你也许会在你的模版里看到下列的组成组件:

<MTFoo>
Foo bar
</MTFoo>

这个容器的开头卷标和结尾卷标看起来都很像标准的 HTML 卷标。

容器卷标可能代表著一份清单或者是一种条件。

如果容器代表著一份清单 ─ 例如像是 <MTEntries> 卷标 ─ 那么容器内的子模版将会套用于清单上的每一项。举例来说,如果你用了一个 <MTEntries> 卷标,那么在 <MTEntries> 卷标和 </MTEntries> 卷标间的组成组件就会套用在清单上的每一则文章项目。

如果容器代表著一种条件 ─ 例如像是 <MTEntryIfExtended> 卷标 ─ 那么开头卷标和结尾卷标间的组成组件就祇有条件吻合时才会显示。举例来说,在 <MTEntryIfExtended> 的情况下,条件考验著是否文章项目有延伸的部分(『更多文字』)。

变数卷标

所有的非容器卷标通通都是单纯的变数替换卷标。它们其实是信息动态片段的位置保留器。举例来说, <$MTEntryTitle$> 卷标就会被文章项目的标题代换掉。

卷标语法

所有的 Movable Type 卷标都被包在小于和大于符号之间,就跟 HTML 卷标一样。你可以选择在这些标志里插入 $ ,就像这样:

<$MTEntryBody$>

透过这个技巧,你就能够迅速地判断某个卷标到底是 HTML 卷标还是 Movable Type 卷标。

这个 $ 是选用性的;惯例上所有的预设模版和文件里都会把变数卷标加上 $ ,但是并不会加进容器卷标里。一部份的原因是因为你该在容器卷标的结尾卷标里用这个 $ ,否则系统就会找不到结尾卷标。

卷标属性

有些 Movable Type 卷标会透过属性来修改他们的预设作用。卷标属性的作用就跟 HTML 卷标的属性很像:他们是一连串的 name="value" 配对,以空白隔开。举例来说:

<MTEntries author="Foo" category="Bar">

属性的值必须被包在引号中;否则就无法被正确地解读。当你在卷标中加入 $ 时,必须把这个字符放在卷标的开始之后、结束之前;然后当你要在这样的卷标中加入卷标属性时,你得把这些属性放在卷标结尾的 $ 字符之前。像是:

<$MTEntryDate format="%B %e, %Y"$>

情境

大部分的 Movable Type 卷标都是仰赖情境的,这表示这些卷标祇应该在适当的情境中被使用。

情境通常都是由附近的模版或者是附近的容器卷标所决定的:举例来说,模版组成组件若被放在 <MTEntries> 卷标里、在单篇汇整页面里、在回响清单模版里或者在回响预览模版里的时候,就是在文章项目情境里。因为这样,所以在这些情境中使用 <$MTEntryTitle$> 卷标或 <MTComments> 容器时才有意义。

卷标索引

以下我们将分类列出所有能用于 Movable Type 模版里的卷标:

网志数据

文章项目列示/汇整页面

回响

预览回响

当你做出回响预览模版的时候,你应该要采用下列这些卷标。这些卷标全部都跟前述的回响小节里名称相近的卷标作用相仿;唯一的不同是这些卷标祇能用于预览之用,而不是用在 <MTComments> 区块中。

这些卷标全部都跟前述的回响小节里名称相近的卷标意思相同。

汇整模版及汇整总索引

下列的模版卷标和变数适用于你的汇整页面及汇整总索引。

与分类相关的卷标

接下来这些卷标可以用来显示网志上的类别清单,以及每一个类别的信息( ID 、卷标等)。

月历显示卷标

下列的卷标可以用来在你的文章项目里画出月历。事实上并没有任何限制说你一定得要用 HTML 的表格来画出月历;这些卷标完全是泛用型的,因此你可以利用她们来做出各种迥然不同样子的月历。

以下是一个标准的月历显示组成,会显示出目前的月份。

<table border="0" cellspacing="4" cellpadding="0" summary="Monthly calendar">
<caption><$MTDate format="%B %Y"$></caption>
<tr>
<th abbr="星期日" align="center">Sun</th>
<th abbr="星期一" align="center">Mon</th>
<th abbr="星期二" align="center">Tue</th>
<th abbr="星期三" align="center">Wed</th>
<th abbr="星期四" align="center">Thu</th>
<th abbr="星期五" align="center">Fri</th>
<th abbr="星期六" align="center">Sat</th>
</tr>
<MTCalendar>
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td <MTCalendarIfToday>bgcolor="#EEEEEE"</MTCalendarIfToday> align="center">
<MTCalendarIfEntries><MTEntries lastn="1"><a href="<$MTEntryLink$>"><$MTCalendarDay$>
</a></MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries>
<MTCalendarIfBlank>&nbsp;</MTCalendarIfBlank></td>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
</table>

请注意:计算出月历显示的代价相当高昂,所以如果你想要在网站上的每一页都摆上同样的月历,比较好的作法是在索引模版里建立一个月历,然后用服务器端的囊括功能或者是 PHP (或者是任何动态的网页服务器工具)来把这个档案囊括到你的每一页里。

引用功能卷标

有一些卷标是和引用功能系统有关的。

搜寻结果卷标

下列这些卷标祇能用于你的搜寻模版里。

其它卷标

这些卷标并不适合放在上述任何一类里。

全域卷标属性

全域卷标属性可以被用于任何变数代换卷标(会被代换成某个值的卷标 ─ 这种卷标的对比就是会『容纳』其它组成元素和卷标的容器卷标)。然而这并不意味著当他们被使用于任何卷标里,都一定要有意义;实际上使用者得自己判断特定的卷标属性是否在实做上有意义。

全域属性的用法就跟卷标专一属性的用法一样:在卷标里使用 name="value" 配对。例如:

<$MTEntryExcerpt encode_html="1"$>
这个卷标会被取代成以 HTML 编码过的文摘。

以下是全域卷标属性的清单:

日期卷标格式

Movable Type 用了标准的 strftime 格式字符串来描述日期和时间。(然而,请注意 strftime 本身并不真的是拿来施用格式的。)在任何的日期卷标里,你都应该可以用 format 属性来指定格式字符串,就像这样:

<$MTDate format="%B %e, %Y %I:%M %p"$>
上面这个格式正是英文日期的预设格式,会做出像是这样子的日期:
September 20, 2001 11:44 PM
你可以在网志组态的显示日期的语言里面选取不同的语言,这个语言会被套用在周里的名称、月份的名称和上午/下午的说明。预设被使用的语言是英文

你也可以用 language 属性来指定语言,覆写掉预设的设定;这祇会套用在你正在制订格式的那个日期字符串上。以下是可用的语言卷标清单: czdknlenfrdeisjpitnoplptsiesfise

以下则是格式说明清单。


保留部分权利AttributionShare Alike