这一章的份量相当之多,前半段是比较抽象的论述以及注意事项,著重在观念的厘清,接著是把这一章范围内的使用者接口快速描述一遍;由于本章涉及大量的 HTML 码,所以将不会以逐步骤抓图的方式解说,否则将把篇幅拖得过于冗长。而后半段则主要是摘录改写自官方文件里的数据。虽然本章对于初学乍练的读者来说会比较难以吸收,但是对于稍微有些基础的读者来说,却应该是相当丰富而实用的数据。
Movable Type 的模版能力恐怕正是其强大之处了。这套系统使得网志的「内容」可以跟「形式」抽离;当你在修改版面安排(形式)的时候,完全不会影响到内容;反之亦然。然而在 Movable Type 的预设模版里,又更进一步地使用了 CSS ,把这个「形式」又拆解成「顺序结构」跟「效果」;前者是 HTML 或 XHTML 的部分,后者则是 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 指令来组态替换模版。例如说,如果你有两份网志( Work
和 Play
),而且你想要让你的网志有自己的模版,你可能会加上这些东西:
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 模版里的卷标:
<$MTBlog*$>
卷标。汇整网址
,也就是会显示在网志组态画面上的那一个。站台网址
(在网志组态画面里的那一个)是 http://www.your-site.com/blog/ ,那么主机名称部分就会是 www.your-site.com
。+|-hh:mm
的格式。例如说,领先 UTC 4
小时的时区,就会被显示成 +04:00
。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
。<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
。<$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*$>
卷标(说明文件)来显示关于每一个类别的信息。这篇文章被归类到下列的类别中: <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 。<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
属性一模一样。<$MTCommentAuthorLink show_email="0"$>那么作者的 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
<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 (或者是任何动态的网页服务器工具)来把这个档案囊括到你的每一页里。
有一些卷标是和引用功能系统有关的。
<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>
可以使用下列的属性:About Page
的模版所产生的页面的话,你可以用:<a href="<$MTLink template="About Page"$>">My About Page</a>
<a href="<$MTLink entry_id="562"$>">Link to a certain entry</a>
最近更新于
的地方,例如:本页面最后更新时间: <$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 这些属性通通具有完全的排他性。
<MTGoogleSearch>
卷标)。title
。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.64
。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
。<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>
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 卷标及项目,奇怪的字符接著也被删去(所谓奇怪的字符指的就是那些不包含在:字母数字字符、底线 (_
) 和空白),然后再把空白转换成底线 (_
) 。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
。
以下则是格式说明清单。
%a
Thu
。%A
Thursday
。%b
Sep
。%B
September
。%d
0
。例如: 09
。%e
9
。%H
0
。例如: 16
。%I
0
。例如: 04
。%j
0
。例如: 056
。%k
9
。%l
4
。%m
0
。例如: 09
。%M
0
。例如: 02
。%p
AM
或 PM
。%S
0
,例如: 04
。%x
September 6, 2002
。%X
4:31 PM
。%y
0
,例如: 01
。%Y
2001
。版权所有 © 2003, 2004 Jedi. 保留部分权利。