Movable Type 的模板是把一些特殊的标记嵌入标准的纯文字片段(在这种情况下也有可能是 HTML )。某些标记是所谓的『容器』标记,里面盛装着可以称之为子模板的东西,实际上就是在两个 MT 标记间夹着其它的文字和 MT 标记。基本上你可以把容器标记想成是一种循环或者是一种条件区块。
其它非容器标记其实就只是变量标记:它们是动态信息的路霸,先占住那个位置等着真正的数据出现。
所有的 Movable Type 标记都被小于符号和大于符号给包起来,就跟 HTML 标记一样。你可以选择性地在这些符号内再插入一个 $ 符号,就像这样:
<$MTEntryBody$>
因此你可以很快地区别某个标记到底是 HTML 标记还是 Movable Type 标记。
Movable Type 标记会用属性来修改它们的作用。标记属性就跟 HTML 标记属性很像:它们是一连串的 名称="值" 配对,彼此之间再以空白隔开。例如说:
<MTEntries author="Foo" category="Bar">
(请查阅 MTEntries 文件来看看这样做到底有什么用。)
属性的值必须用引号包起来,否则会没办法被正确解读。如果你要在某个插入 $ 字符的标记中加入属性,那么你也应该把属性放在两个 $ 之间。例如:
<$MTEntryDate format="%B %e, %Y"$>
有一些标记属性是全域性的,因此可以套用在所有的 Movable Type 变量代换标记上。全域属性会在后面的全域标记属性小节讨论到。至于其它的属性则具有标记专一性,只能套用在特定的标记上;这些属性将会在后面随着那些标记一起列出。
还有一些 Movable Type 标记是对上下文具有敏感性的。例如, MTComments
标记只有在特定的文章项目的特定环境中使用才有意义:比如在回复弹出模板中,或者是设计用于单篇文章归档的归档模板中。
<$MTBlog*$> 标记。
归档网址,也就是会显示在网志配置界面上的那一个。
站点网址(在网志配置界面里的那一个)是 http://www.your-site.com/blog/ ,那么主机名称部分就会是 www.your-site.com 。
+|-hh:mm 的格式。例如说,领先 UTC 4 小时的时区,就会被显示成 +04:00 。
这个标记的作用会依情境而异:如果你把它用于文章情境的话,这份 RDF 就会包含跟这篇文章有关的额外信息;否则它就只会包含整体性的网志信息。
N
天的文章项目,这里的 N 就是你在这个网志的配置中所设定的天数。当你要改变这个作用的时候,你可以加上下列的属性:
N 篇文章项目;这里的 N 是某个大于 0 的数字。
lastn (如前述)一起用的时候,就先从头数最新的 M 篇文章项目,然后才显示接在之后的
N 篇文章。举个例子来说,如果你用了下列的标记:
<MTEntries lastn="5" offset="5"> ... </MTEntries>
那么就会显示第 6 到第 10 篇文章项目。
注意:只有跟 lastn 一起用的时候才有效。
类别名称这个类别中的所有文章。请注意这很有可能会是一长串文章,所以你应该会想要再加上 lastn
来限定显示文章的篇数。
如果你想要从多个类别里把文章项目抓出来,或者是只限定那些被指定到多个类别的文章时, 类别名称 也可以包含 AND
和 OR 这两个布尔逻辑算符。但是请注意,你只能用其中的一个;也就是说,你没办法用 Foo AND
Bar OR Baz -- 这是行不通的!你只能用 Foo AND Bar AND ... 或者
Foo OR Bar OR ... 。
再举一个例子说明,如果你想要列出所有同时被指定到 Foo 和 Bar 这两个类别的文章项目,你可以用:
<MTEntries category="Foo AND Bar"> ... </MTEntries>
作者姓名显示所有的文章。请注意这很有可能会是一长串文章,所以你应该会想要再加上 lastn
来限定显示文章的篇数。
N 天之后的文章。
N 篇有人发表回复的文章项目。每一则文章项目都只会出现一次而已。所以如果文章甲有一篇回复,然后文章乙有一篇回复,接着又有人对文章甲发表回复,结果最后只会显示两则文章项目:文章甲,然后显示的是文章乙。
<MTEntries> 标记所要采用的排序方法。这里的设定将会覆写掉你在网志配置的文章项目排序的全域设定。有效的值分别是
ascend 和 descend 。
在这个情境下, ascend 和 descend 并不只是依时间先后排序;事实上这个属性还可以跟稍后会提到的
sort_by 一起用来排序。举例来说,你可以把文章项目标题排成从 A 到 Z (ascend)
或者是从 Z 到 A (descend) 。
预设值是 descend 。
字段名称值包含有 title
、 status 、 modified_on 、 author_id
或 excerpt 。
这个属性最常见的用法是拿来把文章项目按照字母顺序排列,而不是照它们的时间先后。举例来说,假设你拿 Movable Type 来显示某个字典站点,你会想以字母来标准来对部分的文章项目进行归类,所以你就建立 26 个不同的类别,也就是从 A 到 Z 。当你要显示站点上所有的文章项目,而又想以字母来分类,以字母顺序来排序(在此假设你拿字或词来当作每一则文章项目的标题);你可以这么做:
<MTCategories> <$MTCategoryLabel$><br /> <MTEntries sort_by="title" sort_order="descend"> <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br /> </MTEntries><br /> </MTCategories>
请注意:你可以把 lastn 、 category 和 author
一起混用来筛选文章项目列表(其实还有 days 这个被此标记自己用掉的属性;然而只要你用了其它属性,那么这个属性就会被覆写掉)。举例来说,你可以把
lastn 和 category 一起用在 MTEntries
里,其结果就如你所预期的一般:显示该类别理最新得 N 则文章项目。如果你想要再用作者姓名加以筛选,你也可以把 lastn
、 category 和 author 三个都用上:
<MTEntries category="Fun" author="Me" lastn="10"> ... </MTEntries>
这样就会显示 Fun 这个分类中,作者是 Me 的最新 10 则文章项目。
草稿或者是定稿)。在大多数的情况下,这个标记其实没有什么用。因为在你的网志上,只有状态为定稿的文章才会被显示出来。不过在导出机制里,或许你会用到这个标记。
... )来当作文摘。
如果你提供了文摘的话,请注意所有的换列或换段都不会被转换,除非你在这个标记里用了 convert_breaks 属性:
有断行的文摘: <$MTEntryExcerpt convert_breaks="1"$>
如果你在这则文章项目中核选了转换换列而自动转换换列和换段,那么段落 -- 用两个换列所分隔出来的文字区 -- 就会被包在
<p> 和 </p> 标记里,而所有单一的换列都会维持着,并且插入一个 <br /> 标记。
请注意,只要你在这个标记中加上了 convert_breaks 属性,就会覆写掉针对该文章项目的文字格式设定。所以假设你在文章项目中开启了这项设定,却想在特殊的情况下把它关闭,你可以这样做:
<$MTEntryBody convert_breaks="0"$>
同时也请注意,如果你只想显示文章本体的前 N 个字,那么就可以用 words 属性。再举例来说,下列的例子就只会显示文章本体的前 5 个字。
<$MTEntryBody words="5"$>
当寻找前 N 个字的时候,首先会从文章本体移去 HTML ,然后就只会剩下字及字间空白了。
如果你在这则文章项目中核选了转换换列而自动转换换列和换段,那么段落 -- 用两个换列所分隔出来的文字区块 -- 就会被包在
<p> 和 </p> 标记里,而所有单一的换列都会维持着,并且插入一个 <br /> 标记。
请注意,只要你在这个标记中加上了 convert_breaks 属性,就会覆写掉针对该文章项目的文字格式设定。所以假设你在文章项目中开启了这项设定,却想在特殊的情况下把它关闭,你可以这样做:
<$MTEntryMore convert_breaks="0"$>
偏好归档类别而定。这也是预设的动作,你可以用
archive_type 属性来加以覆写成你想要链接的归档类别。
举例来说,假设你已经选择了要用单篇归档来当作偏好归档类别,那么接下来这个标记:
<$MTEntryLink$>
就会产生一个通往该文章项目所属的单篇归档页面网址,文章的档名将会是该则文章项目的 ID ,不满六位数字的部分则补上零,最后再接上你的网志的归档档案扩展名(例如
html)。
如果你在网志里同时也启用了分类归档,那么你也许会想改连到该则文章项目所属的分类归档页面;这个时候你就可以用这个标记:
<$MTEntryLink archive_type="Category"$>
这个标记会被替换成一个到该文章项目的类别归档页面的链接。
如果你想要真正的永久链接 -- 也就是某一个永远连到特定文章项目的链接,即使是跟许多其它文章项目一起被汇编到同一个页面亦然 -- 这时你应该用
<$MTEntryPermalink$> 标记。
#) 来(藉由 ID )指向该则文章项目。这跟 <$MTEntryLink$>
很像,但聪明得多,因为他在单篇归档以外的归档中都会包含这个锚(在单篇归档中如果还加上这个定位锚,就会显得相当累赘)。
就跟 <$MTEntryLink$> 一样,这个标记也有选用的 archive_type
属性来指定所要链接的归档类别。
如果你加上了 spam_protect 属性,那么E-mail 地址就会被加以修改,以免某些垃圾信机器人蒐集到你的E-mail
地址;然而在这种情况下,网页浏览器却仍旧能够显示出正确的E-mail 地址。举例来说,如果有个E-mail 地址是 foo@bar.com
,然后你用了
<$MTEntryAuthorEmail spam_protect="1"$>
那么这个E-mail 地址就会被显示成 foo@bar.com 。
这个规则可以用 show_email 和 show_url 这两个标记属性来加以覆写。举例来说,如过你用了
<$MTEntryAuthorLink show_email="0"$>
那么作者的E-mail 地址就永远不会被显示出来;于是整个规则就会变成:如果作者有输入网页网址,那么作者名字就会连到那个网址;如果作者没有填写网址,那么这里就只会显示出作者名字,而不提供任何链接。
如果你加上了 spam_protect 属性,而又显示了电子邮件链接的话,这里的E-mail 地址也同样地会被加以修改,以免被某些垃圾信机器人蒐集到。然后在这种状况下,网页浏览器却还是可以显示出正确的E-mail
地址。举例来说,如果有个E-mail 地址是 foo@bar.com ,然后你用了
<$MTEntryAuthorLink spam_protect="1"$>
那么这个E-mail 地址就会被显示成 foo@bar.com 。
format 属性和 language
属性。关于这些属性的详细信息,请见日期标记格式小节。
<MTEntryIfExtended> <a href="<$MTEntryLink$>#<$MTEntryID$>">深入阅读...</a> </MTEntryIfExtended>
编辑文章项目界面里的允许回复被设定成开启或关闭)的时候,才会被显示出来。你可以用这个标记来让某个连到这则文章项目回复的链接,(当然)只有在允许发表回复的时候才显示出来。
使用这个标记的范例请见后面文章项目小节的回复区段。
开启时才会被显示出来。举例来说,你就可以用这个标记来适时地显示出『发表回复』表单。
编辑文章项目界面里的允许通告设定被开启)的时候,才会被显示出来。
使用这个标记的范例请见引用功能文件。
8
的文章项目来说,这个标记只会产生 8 这个值。有的时候你会比较希望你的 ID 被补满零;在这种情况下,你可以在 MTEntryID
标记里使用 pad属性:
<$MTEntryID pad="1"$>
这会用零把文章项目 ID 补满成六 (6) 位数字,例如 000008 。
<$MTCategory*$>
标记(说明文件)来显示关于每一个类别的信息。
你也可以在这个标记里用 glue 属性来指定类别间的分隔字符串。例如当你想要用逗号来隔开类别名称时就会很好用。请注意 glue 属性的值不可以是单引号或双引号。
举例来说:
这篇文章被归档到下列的类别中: <MTEntryCategories glue=", "> <a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a> </MTEntryCategories>
convert_breaks 和 allow_comments
。如果标记的值为真,那么就会显示 1 这个值;否则就会显示 0 这个值。至于标记的名称则是以 flag
属性来传递。例如:
<$MTEntryFlag flag="allow_comments"$>
这个标记用于以导出机制来导出文章项目数据的情况里。你应该不需要在你自己的模板里用到。
MTEntryPrevious
情境中,某个 <$MTEntryTitle$> 标记就会变成前一则文章项目的标题。在你(用一个 </MTEntryPrevious>
标记)结束这个情境后,所有的标记又会恢复成参照当前的文章项目。
使用这标记的范例请见后面的 MTEntryNext
文件。
MTEntryNext
情境中,某个 <$MTEntryTitle$> 标记就会变成下一则文章项目的标题。在你(用一个 </MTEntryNext>
标记)结束这个情境后,所有的标记又会恢复成参照当前的文章项目。
接下来这个范例是个导航列,让你链接到前一则和下一则文章项目,还有一个链接连回你的网志主索引。
<MTEntryPrevious> <a href="<$MTEntryLink$>"><< <$MTEntryTitle$></a> | </MTEntryPrevious> <a href="<$MTBlogURL$>">Main</a> <MTEntryNext> | <a href="<$MTEntryLink$>"><$MTEntryTitle$> >></a> </MTEntryNext>
MTEntries
容器里的时候才会变得非常有用。举例来说:
<MTEntries>
<MTDateHeader>
<$MTEntryDate format="%B %e, %Y"$>
</MTDateHeader>
Title: <$MTEntryTitle$>
</MTEntries>
MTDateHeader
标记来把你特定日期里的所有文章排进某种结构(例如说 div )里。这个标记就跟 MTDateHeader
一样,只有在 MTEntries 容器里的时候才会非常有用。举例来说:
<MTEntries>
<MTDateHeader>
<div class="day">
<$MTEntryDate format="%B %e, %Y"$>
</MTDateHeader>
Title: <$MTEntryTitle$>
<MTDateFooter>
</div>
</MTDateFooter>
</MTEntries>
<MTEntries> 容器里的第一篇的时候才会显示出来。
<MTEntries> 容器里的最后一篇的时候才会显示出来。举例来说,这可以用在你的索引页面上,链接到前一则文章项目的归档页面。例如当你在使用逐日归档时:
<MTEntries days="1"> ... <MTEntriesFooter> <MTEntryPrevious> <a href="<$MTEntryLink archive_type="Daily"$>">昨日归档: <$MTEntryDate format="%A, %B %d, %Y"$></a> </MTEntryPrevious> </MTEntriesFooter> </MTEntries>
lastn 属性使用的情境而定,详见后述)所有回复清单的容器标记。
如果你在这个标记里加上了 lastn="N" 属性,这里的 N 是你想要显示的回复数量,那么就会显示当前文章项目 -- 如果用在文章项目情境中 -- 或网志 -- 如果用在其它地方 -- 里最新的 N 篇回复。
如果你使用这个标记时没有加上任何属性,那么 <MTComments> 就会列出所有当前文章项目的回复。这表示当你使用这个标记而不加上任何属性的时候,一定是用于文章项目情境:在单篇归档模板、回复预览模板、回复清单模板或回复出错模板里,放进 <MTEntries> 中。
在预设的情况下,这些回复会按照你在网志配置理指定的回复显示顺序来排序并保存。不过你还是可以在这个标记里用 sort_order 属性来覆写这个设定;这个属性的值可以是 ascend 或是 descend 。
举例来说,要显示你的网志上最近被发表的 6 篇回复,丝毫不考虑它们各自所属的文章项目,而以时间顺序倒序排列(把最新的放在最前面)的话,你可以把下列的标记放到你的主索引模板里:
<MTComments lastn="6" sort_order="descend"> <p><$MTCommentAuthor$> 说道:<br /> <$MTCommentBody$></p> </MTComments>
对于回复清单里的每一篇来说,在容器内的文字及标记都会被显示出来。下列每一个标记都用于显示某篇回复的特定变量区块。
8 的文章项目来说,这个标记只会产生 8 这个值。有的时候你会比较希望你的 ID 被补满零;在这种情况下,你可以在这个标记里使用 pad 属性:
<$MTCommentID pad="1"$>
这会用零把回复 ID 补满成六 (6) 位数字,例如 000008 。
<MTComments lastn="N"> 的时候会相当有用,因为它会让你连到跟这篇回复所对应到的特定文章项目。
这个标记也有一个选用的 pad 属性,其功能就跟前述的 <$MTCommentID$> 标记中的 pad 属性一模一样。
这个规则可以用 show_email 和 show_url 这两个标记属性来加以覆写。举例来说,如过你用了
<$MTCommentAuthorLink show_email="0"$>
那么作者的E-mail 地址就永远不会被显示出来;于是整个规则就会变成:如果作者有输入网页网址,那么作者名字就会连到那个网址;如果作者没有填写网址,那么这里就只会显示出作者名字,而不提供任何链接。
如果你希望强迫发表回复的读者必须留下E-mail 地址 -- 这意味着你不能够在网志配置里核选允许匿名回复核选框 -- 而又不想在网志上显示它们的E-mail 地址时会相当有用。
如果你加上了 spam_protect 属性,而又显示了电子邮件链接的话,这里的E-mail 地址也同样地会被加以修改,以免被某些垃圾信机器人蒐集到。然后在这种状况下,网页浏览器却还是可以显示出正确的E-mail 地址。举例来说,如果有个E-mail 地址是 foo@bar.com ,然后你用了
<$MTCommentAuthorLink spam_protect="1"$>
那么这个E-mail 地址就会被显示成 foo@bar.com 。
如果你加上了 spam_protect 属性,那么E-mail 地址就会被加以修改,以免某些垃圾信机器人蒐集到你的E-mail 地址;然而在这种情况下,网页浏览器却仍旧能够显示出正确的E-mail 地址。举例来说,如果有个E-mail 地址是 foo@bar.com ,然后你用了
<$MTCommentEmail spam_protect="1"$>
那么这个E-mail 地址就会被显示成 foo@bar.com.
转换换列和换段,那么段落 -- 用两个换列所分隔出来的文字区块 -- 就会被包在 <p> 和 </p> 标记里,而所有单一的换列都会维持着,并且插入一个 <br /> 标记。
请注意,只要你在这个标记中加上了 convert_breaks 属性,就会覆写掉针对全域的转换换列和换段设定。所以假设你在全域设定中开启了这项设定,却想在特殊的情况下把它关闭,你可以这样做:
<$MTCommentBody convert_breaks="0"$>
format 属性和 language
属性。关于这些属性的详细信息,请见日期标记格式小节。
1 开始。请注意这里的顺序是按照排序(递增或递减)而定的。
<$MTEntry*$> 标记来参照该则文章项目。举例来说,你就可以这么用:
<MTComments lastn="5" sort_order="descend"> <MTCommentEntry> 这篇回复是针对 <$MTEntryTitle$> 这篇文章所发表的。 </MTCommentEntry> </MTComments>
当你做出回复预览模板的时候,你应该要采用下列这些标记。这些标记全部都跟前述的回复小节里名称相近的标记作用相仿;唯一的不同是这些标记只能用于预览之用,而不是用在 <MTComments> 区块中。
回复小节里名称相近的标记意思相同。
回复预览模板和回复出错模板里,好让系统得知发表完回复后要把读者转送到哪里。使用这个标记时,把下面这个隐藏输入字段贴进你的回复预览模板和回复出错模板里:
<input type="hidden" name="static" value="<$MTCommentPreviewIsStatic$>">
<$MTCommentPreviewState$> 标记。
这是一个你需要在回复预览页面(回复预览模板)里使用的神奇标记。这个标记会被替换成一切要发表回复所需的回复数据,以及回复是从嵌入式回复或弹出式回复所发表的消息。
下列的模板标记和变量适用于你的归档页面及归档总索引。
MTEntries 标记来显示该页面上每一则文章项目的信息。举例来说:
<MTArchiveList>
<a href="<$MTArchiveLink$>"><$MTArchiveDate$></a><br />
<MTEntries>
[<$MTEntryTitle$>]
</MTEntries>
<br /><br />
</MTArchiveList>
这会显示一个连往归档页面的链接,后面再跟着那一个页面上每一则文章项目的标题清单。
这个标记有两个属性可用: archive_type 会指定归档清单的类别,而 lastn 则会限制列出的归档数量。
archive_type 这个属性是选用的;如果没有这个属性的时候,就会使用你的偏好归档类别,或者你的归档类别。不过这个属性在你选用了多于一种网志归档类别的,而你又想要用不是你的偏好归档类别列出的时候会很好用。举例来说,如果你打算要保持单篇归档和逐日归档,而你的偏好归档类别是单篇归档时,你可以用这个标记来列出你的逐日归档:
<MTArchiveList archive_type="Daily"> ... </MTArchiveList>
lastn 属性可以用来限制列出的归档数量;举例来说,如果你的网志上有多于 10 个月份量的归档,但是你只想要列出最近的 5 个时,就用这个标记:
<MTArchiveList archive_type="Monthly" lastn="5"> ... </MTArchiveList>
根据预设值,这个链接会连到目前正在建立的归档类别的归档页面;举例来说,建立一连串的逐月归档时,
<$MTArchiveLink> 会产生连到特定的逐月归档的链接。你可以指定 archive_type 属性来覆写这个作用;这个属性可以设成下列几个值之一: Individual 、 Daily 、 Weekly 、 Monthly 或 Category 。
Month Day, YYYY 格式表示的日期。
Month Day, YYYY - Month Day, YYYY 格式表示的该周日期范围。
Month YYYY 格式表示的月份。
把 MTArchiveTitle 跟 MTArchiveLink
放在一起用可以说是建立归档总索引最简单的方法了。因为 MTArchiveTitle
的值会随着任何你选择的类别而改写。举例来说:
<MTArchiveList> <a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a><br /> </MTArchiveList>
不论你选择了哪一种归档类别,都能够显示出有用的归档页面清单。
<MTArchiveList> 容器时会很有用,就像这样:
<MTArchiveList> <a href="<$MTArchiveLink$>"><$MTArchiveTitle$> (<$MTArchiveCount$>)</a><br /> </MTArchiveList>
逐日归档、逐周归档或者是逐月归档时才有意义。这也是标准的日期标记,所以请参照后面会提到的日期标记格式来自定义日期格式。
你可以在某个 MTArchiveList 容器里使用这个标记,也可以用于某个和按时归档类别相关联的归档模板里、在 MTEntries 标记以外的地方。你可以用来显示特定归档页面的日期档头 -- 例如月份和年份:
<$MTBlogName$> Archives: <$MTArchiveDate format="%B %Y"$> <MTEntries> ... </MTEntries>
逐日归档、逐周归档或者是逐月归档时才有意义;除此以外的情况都会失效。请参照后面会提到的日期标记格式来自定义日期格式。
你可以在 <$MTArchiveDate> 标记所适用的相同情境中使用这个标记。
分类归档的时候才有意义。
你可以在某个 MTArchiveList 容器中使用这个标记,也可以用于某个和你的分类归档相关联的归档模板里、在 MTEntries 标记以外的地方。你可以用来显示特定归档页面的类别档头,例如:
<$MTBlogName$> Archives: <$MTArchiveCategory$> <MTEntries> ... </MTEntries>
MTArchivePrevious 情境中, <$MTArchiveTitle$> 标记就会去参照前一个归档的标题。当你(用 </MTArchivePrevious> 标记)结束这个情境后,所有的标记又会回来参照现用的归档。
这个标记可以用于你指定与逐日、逐周或逐月归档相关联的归档模板中;如果你想要在单篇文章归档中也有相似的功能,请参考 <MTEntryPrevious> 标记。
在预设的情况下,『前一份』归档是按照归档类别而定的 -- 例如说,在逐日归档里,『前一份』归档指的是前一天的文章归档。如果你想要覆写这样的作用 -- 例如你更想要链接到前一个月份的归档 -- 时你就可以用 archive_type 属性(范例见后)。
使用这个标记的范例请见后面的 <MTArchiveNext> 文件。
MTArchiveNext 情境中, <$MTArchiveTitle$> 标记就会去参照下一个归档的标题。当你(用 </MTArchiveNext> 标记)结束这个情境后,所有的标记又会回来参照现用的归档。
这个标记可以用于你指定与逐日、逐周或逐月归档相关联的归档模板中;如果你想要在单篇文章归档中也有相似的功能,请参考 <MTEntryNext> 标记。
在预设的情况下,『下一份』归档是按照归档类别而定的 -- 例如说,在逐日归档里,『下一份』归档指的是前一天的文章归档。如果你想要覆写这样的作用 -- 例如你更想要链接到前一个月份的归档 -- 时你就可以用 archive_type 属性。
这个范例是一个导航列,提供连往前一份归档和下一份归档的链接,以及一个连回你的网志主索引的链接。
<MTArchivePrevious> <a href="<$MTArchiveLink$>"><< <$MTArchiveTitle$></a> | </MTArchivePrevious> <a href="<$MTBlogURL$>">Main</a> <MTArchiveNext> | <a href="<$MTArchiveLink$>"><$MTArchiveTitle$> >></a> </MTArchiveNext>
接下来这个导航列的范例可以被用在逐日归档里,用来连到前一个月份的归档以及下一个月份的归档。如果你在你所有的逐日归档里都加上了日历,然后想要连到前一个月份和下一个月份的月历时,就会很有用。
<MTArchivePrevious archive_type="Monthly"> <a href="<$MTArchiveLink archive_type="Monthly"$>"><$MTArchiveDate format="%b"$></a> </MTArchivePrevious> <MTArchiveNext archive_type="Monthly"> <a href="<$MTArchiveLink archive_type="Monthly"$>"><$MTArchiveDate format="%b"$></a> </MTArchiveNext>
接下来这些标记可以用来显示网志上的类别清单,以及每一个类别的信息( ID 、标记等)。
<MTEntries> 标记来显示这个类别中每一个文章项目的信息。例如:
<MTCategories> <a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a><br /> <MTEntries> <$MTEntryTitle$> </MTEntries> <br /><br /> </MTCategories>
这会显示连往每一个类别的链接,然后后面再个别跟着该类别的文章标题清单。
如果某个类别里没有包含任何文章项目的话,预设这个类别就不会包含在这个类别清单里。这个预设的作用之所以会是这样,主要因为它是从 <MTArchiveList> 的预设作用所复制而来的。请注意如果你包括了连到分类归档页面的话,这样也是建议的作法;因为空的类别不会产生归档页面。换而言之,连往空的类别的归档链接会是一个坏掉的链接。
如果你想要覆写这个预设的作用,你可以在这个标记里加进 show_empty 属性。例如这些标记:
<MTCategories show_empty="1"> <$MTCategoryLabel$> </MTCategories>
就会显示所有的类别清单,即使是空的类别也会。
分类归档时才有效;否则你就会在重建页面的时候得到一个错误信息。
<MTCategories> 里面)中,不然你也可以用 category 属性来指明引用通告网址所要对应到的类别。举例来说:
<$MTCategoryTrackbackLink category="Foo Bar"$>
只要你指定了这个属性,就可以在任何你想要的地方使用这个标记。
下列的标记可以用来在你的文章项目里画出日历。事实上并没有任何限制说你一定得要用 HTML 的表格来画出日历;这些标记完全是泛用型的,因此你可以利用它们来做出各种迥然不同样子的日历。
<MTCalendar> 标记和 </MTCalendar> 标记之间的组成组件都代表着日历里的一个『格子』(有可能是一个月里的某一天,或者是属于别的月份的空白格子)。
这个标记还可以加上选用的 month 属性,用来指定要显示哪一个月份和年份的月历。如果这个属性的值是 this 这个字符串,就会建立起近期情境;这表示说,你可以在归档模板里用
<MTCalendar month="this"> ... </MTCalendar>
来表示正被检查的归档那个月份的月历。这个标记在单篇归档、逐日归档、逐周归档和逐月归档里都可以用,但是你不能拿进分类归档用。
如果 month 属性的值被设定成 last 的话,就会建立出相对目前日期的前一个月份的月历。
如果你想要建立特定月份的月历,你可以在 month 属性中用 YYYYMM 格式(例如: 200112 )来指定确切的月份和年份。
如果你没有加上 month 属性的话,就会显示当月的月历。
如果你只想要在日历里显示某个特定类别的文章,你可以指定 category 属性,并且指明该类别的名称。举例来说,下面这个标记:
<MTCalendar month="200201" category="Foo"> ... </MTCalendar>
就只会显示 2002 年一月份所有 Foo 这个类别里的文章项目。
1 )。你可以在 <MTCalendarIfEntries> 容器和 <MTCalendarIfNoEntries> 容器里用这个标记。
1 ,然后依序增加,往水平方向在日历上横跨。
这个标记跟前述的 <$MTCalendarDay$> 不同,因为后者仅套用于非『空白』的格子(也就是代表着特定月份里某个日子的项目)。
format 属性。如果你只想要显示数字型的日期,那么就只需要用 <$MTCalendarDay$> 就可以了;只有在你想要显示更多日期/时间信息的时候,才有必要使用这个标记。
<MTCalendarWeekHeader> 标记和 </MTCalendarWeekHeader> 标记间的组成元素都只会在每一周的开始时被显示出来。
<MTCalendarWeekFooter> 标记和 </MTCalendarWeekFooter> 标记间的组成元素都只会在每一周的结束时被显示出来。
<MTCalendarIfBlank> 标记和 </MTCalendarIfBlank> 标记间的组成元素都只会在该格子是一个『空』格子 -- 也就是不代表该月份任何一天的格子 -- 时被显示出来。
<MTCalendarIfEntries> 标记和 </MTCalendarIfEntries> 标记间的组成元素都只会在该格子里的日期有任何文章项目时才显示出来。你还可以用 <MTEntries> 标记来显示那一天里所有的文章项目。
举例来说:
<MTCalendarIfEntries>
这一天里的文章:
<MTEntries>
<a href="<$MTEntryLink$>"><$MTEntryTitle$></a><br />
</MTEntries>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries> 标记和 </MTCalendarIfNoEntries> 标记间的组成元素只有在该格子里的日期没有任何文章项目的时候才显示出来。
<MTCalendarIfToday> 标记和 </MTCalendarIfToday> 标记间的组成元素只有在该格子里的日期就是目前的日期时才显示出来。
这里是一个标准的日历显示组成,会显示出目前的月份。
<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> </MTCalendarIfBlank></td> <MTCalendarWeekFooter></tr></MTCalendarWeekFooter> </MTCalendar> </table>
请注意:计算出日历显示的代价相当高昂,所以如果你想要在网站上的每一页都摆上同样的日历,比较好的作法是在索引模板里建立一个日历,然后用服务器端的包括功能或者是 PHP (或者是任何动态的网页服务器工具)来把这个档案包括到你的每一页里。
有一些标记是和引用功能系统有关的。
如果你在文章项目情境里 -- 举例来说,例如在引用清单模板里 -- 使用这个标记,那么它就会列出所有送到该文章项目的引用通告。
如果是用在某个跟分类归档相关联的模板中,那么这个标记就会列出所有送到这个类别的引用通告。
如果适用在任何其它的情境中,那么这个标记就会列出所有(除非你在标记里也用了 lastn 属性 -- 详见后述)送到你的系统的引用通告。
除此之外,如果你想指定列出某一个特定类别的通告的话,你也可以在这个标记里用 category 属性来提供该类别的名称,像这样:
<MTPings category="Foo"> ... </MTPings>
同时你也可以在这个标记里面使用 sort_order 属性和 lastn 属性,它们作用的情况会跟在其它 Movable Type 标记里的一样。 sort_order 属性的值可以是 ascend 或者是 descend ;而 lastn 属性的职责应该是正整数,表示要列出最近 N 个引用通告。
举例来说,要在头版页列出在 Foo Bar 这个类别中最新的 15 个通告的话,你可以把下列这段加入你的主索引模板之中:
<MTPings category="Foo Bar" lastn="15"> <a href="<$MTPingURL$>"><$MTPingTitle$></a><br /> </MTPings>
format 属性和 language 属性。更多信息请见日期标记格式小节。
举例来说:
<MTPingsSent> 网址: <$MTPingsSentURL$><br /> </MTPingsSent>
<MTPingsSent> 标记里面使用。
下列这些标记只能用于你的搜索模板里。
<$MTEntry*$> 标记,因为搜索结果所代表的项目会进入情境之中。你也可以用任何的 <$MTBlog*$> 标记来存取特定文章项目结果被找到的网志数据。
举例来说:
<MTSearchResults> <MTBlogResultHeader> <h2><$MTBlogName$>内的结果</h2> </MTBlogResultHeader> <h3><a href="<$MTEntryLink$>#<$MTEntryID pad="1"$>"><$MTEntryTitle$></a></h3> <$MTEntryExcerpt$> <$MTEntryEditLink$><br /> <div class="posted"><$MTEntryDate$> 时,被发表在 <$MTBlogName$></div> </div> </MTSearchResults>
举例来说:
<MTNoSearchResults> <h2>已搜索 "<$MTSearchString$>"</h2> <p>没有找到任何包含有 "<$MTSearchString$>" 的页面。</p> </MTNoSearchResults>
http://YOURDOMAIN.COM/PATH-TO/mt-search.cgi
或者是在新回复搜索的情况下,有读者直接到
http://YOURDOMAIN.COM/PATH-TO/mt-search.cgi?Type=newcomments&help=1
正确使用这个标记的方法可能是显示搜索指引,或者是提供更进阶的搜索表单。
例如像这样:
<MTNoSearch> <h2>指引</h2> <p>... 这里是一些搜索指引 ...</p> </MTNoSearch>
这个容器标记里面的内容只有当搜索的结果位于网志分组里的第一笔时才显示。要显示网志名称、甚至是加上连往该网志的主索引链接时,都很好用。
这些标记并不适合放在上述任何一类里。
<MTElse> 标记来让任何条件标记支持『否则』条件。也就是说,通常适用于任何名称里含有 If 的标记(例如像 <MTEntryIfExtended> )。 <MTElse> 这个容器标记里面的内容只有当条件不被符合时才显示。这个 <MTElse> 容器应该被放进能够提供『否则』条件的条件标记容器里。
以下是一个用法的范例:
<MTEntryIfExtended> 这个文章项目具有扩展内容。 <MTElse> 这个文章项目没有扩展内容。 </MTElse> </MTEntryIfExtended>
MTInclude 标记来把一个模板模块(请见前面提过的模板模块区段,这个区段位于模板小节里)或外部档案包括进另一个模板里。 <MTInclude> 会取用下列的属性:
Header 的模板模块,再用 <MTInclude> 来包括之:
<$MTInclude module="Header"$>
本机站点路径目录下或本机归档路径目录下的单纯档名。举例来说,如果你的本机站点路径目录里,有个叫 foo.html 的档案,那么你可以像这样将其包括进某个模板里:
<$MTInclude file="foo.html"$>
这个档案将在页面被重建的时候被包括进你的模板;请注意这个作用不该和服务器端包括弄混,因为后者会在每次网页服务器收到该页的需求时就把外部档案包括进去。所以每当你变更了通过 <MTInclude> 标记被包括的外部档案后,请别忘记得要重建这些页面才有办法包括这些被修订过的部分。
<MTLink> 标记来自动产生索引模板或系统中某篇文章的网址。 <MTLink> 可以使用下列的属性:
最近更新于的地方,例如:
本页面最后更新时间: <$MTDate format="%B %d, %Y %I:%M %p"$>.
这个标记可以加上下列的属性:
1 ,在这个情况下传回的页面会跟你的页面(假设你在站点网址设定了你的主页网址)很像。范例请见后。
10 。
举例来说,如果你想要列出查询 movable type 的最前 5 笔搜索结果:
<MTGoogleSearch query="movable type" results="5"> <a href="<$MTGoogleSearchResult property="URL"$>"><$MTGoogleSearchResult property="title"$></a><br /> </MTGoogleSearch>
或者是列出跟你的页面相似的其它页面清单:
<MTGoogleSearch related="1"> <a href="<$MTGoogleSearchResult property="URL"$>"><$MTGoogleSearchResult property="title"$></a><br /> </MTGoogleSearch>
请注意 query 、 related 、 title 以及 excerpt 这些属性通通具有完全的排他性。
同时也请注意,如果你在你的单篇归档模板里使用 Google 搜索标记的话,搜索结果清单也会在任何你保存文章项目的时候被产生;而这会拖慢重建的进度;甚至当你发表的速度较快、或者当你的站点总是有大量回复时,你可能很快就会用完 Google 所允许的每日查询次数上限。
注意:使用这个标记前你得先取得一把 Google API 金钥,并且将之贴进你的网志配置里;同时你还得先安装 SOAP::Lite 模块和 LWP::UserAgent 模块(你可以执行 mt-check.cgi 来看看你是否已经安装过这些模块了)。
<MTGoogleSearch> 标记)。
这个标记只有一个额外的 property 属性,用来指定要显示的搜索结果字段(例如:标题、网址、摘要等等)。预设的 property 是 title 。
有效的 property 值包括了: summary 、 URL 、 snippet 和 title 。
name 属性来设定变量名称,然后用 value 属性来设定变量值。然后你就可以用 <MTGetVar> 标记(如后述)来取得这个变量的值。
name 属性来指定。举例来说,你可以在外部模板中设定变量 foo 的值:
<MTSetVar name="foo" value="bar">
然后在某个被包括的模板模块里,取得这个变量的值:
<MTGetVar name="foo">
CGIPath 列的值(在安装过程中所设定的;详见安装指引)代换掉。 MTCGIPath
可以让连往 Movable Type CGI 脚本 -- 例如 mt-comments.cgi 和 mt-add-notify.cgi -- 这件事变得相当简单;你不再需要老是在你的模板里使用这些 CGI 脚本的网址,而只需要用这个标记就可以了。举例来说,当你要建立发表回复的表单时:
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>">
跳出已上传图像模板。
跳出已上传图像模板。
跳出已上传图像模板。
回复出错模板里,它会被替换成送出回复过程中所发生的错误信息(例如例如无效或缺少了的E-mail 地址)。
2.0 。
iso-8859-1 (译注:而这将导致中文显示的不正确。所以请务必在 mt.cfg 里将 PublishCharset 设成 UTF-8 )。
全域标记属性可以被用于任何变量代换标记(会被代换成某个值的标记 -- 这种标记的对比就是会『容纳』其它组成元素和标记的容器标记)。然而这并不意味着当它们被使用于任何标记里,都必须有意义;实际上使用者得自己判断特定的标记属性是否在实做上有意义。
全域属性的用法就跟标记专一属性的用法一样:在标记里使用 name="value" 配对。例如:
<$MTEntryExcerpt encode_html="1"$>
这个标记会被替换成以 HTML 编码过的文摘。
以下是全域标记属性的清单:
,) 来分隔过滤器名称。如果你指定了多重过滤器的话,它们将会按照你所列出的顺序先后被执行。举例来说,如果你定义了一个短名称叫 wiki 、会执行 Text::WikiFormat 这个 CPAN 模块的过滤器的话,你就可以这么做:
<$MTEntryTitle filters="wiki"$>
来把 ''这是一个标题'' 这样的标题转换成 <em>这是一个标题</em> 。
1 的时候,标记的值就会编码成 HTML 。举例来说,如果没有这个属性的时候标记的值为 Foo & Bar -> Baz ,那么编码成 HTML 的版本就会变成 Foo & Bar -> Baz 。
使用范例:
<$MTEntryExcerpt encode_html="1"$>
1 的时候,就把该项目中任何 XML 里需要加以编码的字符予以编码。这些字符包括有: & 、 、 < 和 > 。
举例来说,如果没有这个属性的时候标记的值为 Foo & Bar -> Baz ,那么编码成 XML 的版本就会变成 Foo & Bar -> Baz 。
使用范例(于 RSS 模板中):
<item>
<title><$MTEntryTitle encode_xml="1"$></title>
注意:这个属性跟 encode_html 间的差异在于后者会把更多特殊字符编码成 HTML 项目;如果你安装了 HTML::Entities 模块,那么你就不需要在 mt.cfg 里开启 NoHTMLEntities 选项。
1 的时候,就把标记的值按照 Javascript 字符串值的用法编码成合适的格式。举例来说,如果没有这个属性的时候标记的值为 Foo "Bar" Baz's 1/2 Quux ,那么编码后的版本就会变成 Foo \"Bar\" Baz\'s 1\/2 Quux 。
使用范例:
<script type="text/javascript"> var str = '<$MTEntryTitle encode_js="1"$>'; </script>
q (single-quote) 、 qq (double-quote) 或 heredoc (here document -- 请注意此处的 here 对于一个 here document 来说仍然具有功效)。
q 的使用范例:
<?php $str = '<$MTEntryTitle encode_php="q"$>' ?>
heredoc 的使用范例:
<?php $str = <<<HERE <$MTEntryBody encode_php="heredoc"$> HERE; ?>
foo bar 这个字符串就会被转换成 foo%20bar 。
使用范例:
<a href="/search?q=<$MTEntryTitle encode_url="1"$>">搜索</a>
(感谢 Scott Andrew LePera 提供了此范例的原始版本。)
1 的时候,把所有在这个标记值里的 HTML 项目加以译码。举例来说,如果没有这个属性的时候标记的值为 foo<br> ,那么 HTML 项目被译码后的版本就会变成 foo<br> 。
用法范例:
<$MTEntryTitle decode_html="1"$>
1 的时候,把所有在这个标记值里的 XML 项目加以译码。举例来说,如果没有这个属性的时候标记的值为 foo<br> ,那么 XML 项目被译码后的版本就会变成 foo<br /> 。
用法范例:
<$MTEntryTitle decode_xml="1"$>
1 的时候,就从标记值里删掉所有的 HTML 标记。举例来说,如果没有这个属性的时候标记的值为 Foo<br /> Bar ,那么没有 HTML 标记的版本就会变成 Foo Bar 。
用法范例:
<$MTEntryTitle remove_html="1"$>当这个属性被设成
1 的时候,就把这个标记值给『变成目录』。这表示这个标记的值会按照档案或目录名称的用法,转换成适当的样子:首先这个值会全部被转换成小写,接着删去所有的 HTML 标记及项目,奇怪的字符接着也被删去(所谓奇怪的字符指的就是那些不包含在:字母数字字符、底线 (_) 和空白),然后再把空白转换成底线 (_) 。
dirify 同时也会把一些高-ASCII 字符(例如重音标记字符)转换成相对应的低-ASCII 字符;这表示像 crudité 这样的东西将会被转换成 crudite 。
举例来说,如果没有这个属性的时候标记的值为 Foo "Baz" is<br /> Bar! ,那么变成目录后的版本就会是 foo_baz_is_bar 。
用法范例:
<$MTArchiveCategory dirify="1"$>
用法范例:
<$MTEntryTitle upper_case="1"$>
用法范例:
<$MTArchiveDate format="%B" lower_case="1"$>
用法范例:
<$MTEntryTitle trim_to="15"$>
上面这个标记将只会显示出文章项目标题的前 15 个字符。
用法范例:
<$MTCalendarDay space_pad="3"$>
上面这个标记会在 3 这个值前面插入空白,使其变成『 3』。
用法范例:
<$MTCalendarDay zero_pad="5"$>
上面这个标记会在 8 这个值前面插入零,使其变成 00008 。
<$MTCalendarDay sprintf="%05s"$>
1 的话,预设的扫描规格 -- 不论是该网志独有的或是整体设定里的 -- 就会被采行。如果这个属性的值被设定成 0 的话,这个标记的扫描功能就会被关闭。如果这个属性的值是任何其它的东西的话,也会被当成是要采行扫描规格。
用法范例
<$MTEntryBody sanitize="a href"$>
这样将会把文章中所有的 HTML 标记清乾净,只留下 <a> (而且只会留着带有 href 属性的)。
Movable Type 用了标准的 strftime 格式字符串来描述日期和时间。(然而,请注意 strftime
本身并不真的是用来执行格式的。)在任何的日期标记里,你都应该可以用 format 属性来指定格式字符串,就像这样:
<$MTDate format="%B %e, %Y %I:%M %p"$>
上面这个格式正是英文日期的预设格式,会做出这样的日期:
September 20, 2001 11:44 PM
你可以在网志配置的显示日期的语言里面选取不同的语言,这个语言会被套用在周里的名称、月份的名称和上午/下午的说明。预设的语言是英文。
你也可以用 language 属性来指定语言,覆写掉预设的设定;这只会套用在你正在制订格式的那个日期字符串上。以下是可用的语言标记清单: cz 、 dk 、 nl 、 en 、 fr 、 de 、 is 、 jp 、 it 、 no 、 pl 、 pt 、 si 、 es 、 fi 、 se 。
以下则是格式说明清单。
Thu 。
Thursday 。
Sep 。
September 。
0 。例如: 09 。
9 。
0 。例如: 16 。
0 。例如: 04 。
0 。例如: 056 。
9 。
4 。
0 。例如: 09 。
0 。例如: 02 。
AM 或 PM 。
0 ,例如: 04 。
September 6, 2002 。
4:31 PM 。
0 ,例如: 01 。
2001 。
注意:自 Movable Type 2.0 版起,就不再提供 %Z 这个格式组件了;如果你需要用到时区的话,请参照 <$MTBlogTimezone$> 标记。