Movable Type 模板


MOVABLE TYPE 模板

模板和标记哲学

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

这两点都会在后面详加描述。对于其它出版管理系统的使用者、也就是那些更熟悉其它模板标记的人来说,这里有一些内部模型差异的注意事项:

为什么 Movable Type 用了现在出现于模板里的内部模型呢?有两个原因:

  1. 最主要的原因是灵活度的考量。你可以用 <MTEntries> 标记来表示你任何文章项目的清单,并且可以通过各种不同的手段,把这份清单变成任何你想要的样子。跟 Greymatter 的方法比较一下,后者的 {{logbody}} 标记总是被完全相同的组成组件所定义样式的文章项目清单所替换:这些组成组件是两个 Index Entry Templates 模板的其中一个。

  2. 你可以少盯一些模板,而且可以在一个模板里就组出整个页面的版面安排。 Greymatter 的方法通常会把一个页面拆成许多小片段,每一个小片段都是一个模板。在 Movable Type 的模板系统中,所有的组成组件都放在同一个地方,并且通过容器标记来决定是否要包括或重复。

(请注意上面这一段并不是在指责 Greymatter 的不是,我们只不过是要试着描绘出两者的不同,并解释为什么我们选择了现在所用的这一套。)

标记种类

Movable Type 模板是由许多特别的模板,并嵌入标准的纯文字(或 HTML 在此也有可能)片段。这一些标记的集合可以分成两群 -- 容器和变量:

标记语法

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

<$MTEntryBody$>

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

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

标记属性

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

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

(要知道这里到底发生了些什么事,请翻阅 <MTEntries> 文件。)

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

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

被各个 Movable Type 标记所支持的属性,会跟着这些标记被列出。

情境的重要性

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

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

技术信息

以下这些技术信息说明了模板如何被解读后再建造成输出页面。

第一步是把进来的模板拆成若干零件,每一个零件都是一个标记(例如 <$MTEntryText$><MTEntries> 之类的)或可以被直接插入的原始文字区块。有些标记是容器,例如 <MTEntries> -- 这些标记必须包含开启标记和关闭标记,然后介于其间的组成组件也一样被拆解成若干零件,再保存于容器之下。

第二步是取得这些零件以及文章项目、文章项目清单、回复、回复清单之类的 -- 基本上就是某种内容 -- 然后再建造出最后输出的页面。一般说来这个最后的页面会是 HTML ,不过显然系统本身并没有这样的限制(别忘了, RSS 串联模板早就装进来啦)。

标记自己本身并没有写死在分析程序(把文字编译成零件的对象)里;每一次分析程序找到一个标记后,它就会内容对象有关标记的类别为何、是否是个容器之类的。然后这个标记就会增加到零件清单里。

同样地这些标记也不是写死在用来建造最后输出的对象(其本质是转译程序)里。这个对象也会跟内容对象沟通;对于每一个他所处理的对象,都会有一个匿名的副例程 -- 该副例程已经被以其创造之上的内容对象注只过 -- 被唤起。这个副例程会传回一整块输出,然后直接插入最后的输出里。


Copyright © 2001-2003 Six Apart. All Rights Reserved.
Back to www.gccgle.com