Movable Type 的公开搜寻接口其实是把 Jay Allen 的 mt-search 附加组件加以整合而成的。这个搜索引擎支持两种搜寻类别:直接关键词搜寻和新评论搜寻。直接关键词搜寻可以用布林字符串、语词搜寻跟正规表示式匹配(如果选用了的话)等不同的方式。新评论搜寻(实际上可能更像是『列出』)会列出所有在特定时间范围内,在你的站台上所发表的新评论。
搜寻字符串会被纪录在你的站台活动日志里。
搜寻模版跟 Movable Type 里的其它模版管理起来并不同,因为他们并非依网志为准的,所以放在编辑选单的『模版』区段中反而没有意义。搜寻模版实际上是一些放在你的 search_templates/ 目录中的档案;这个目录应该会跟 mt.cgi 位于同一个位置。
在你的搜寻模版中,你可以用一些特殊的模版卷标集合来显示搜寻结果。不过你几乎也可以用其它的 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>
一般说来,当有人执行了搜寻动作的时候,预设的搜寻模版 (default.tmpl) 就会被重新绘制来显示搜寻结果(不过在新评论搜寻的情况下,使用的模版会是 comments.tmpl )。如果你有多重网志,而且这些网志上都用了搜寻工具,你可能会希望每一个网志上的搜寻结果看起来都不一样。也有可能你想要做出不同版本的网站版面:大量图片版本、正常版本以及大量文字版本,来让不同的读者各自按照需求选用;所以你会希望不同版本的搜寻结果仍旧和相对应的站台本体保持相同的感觉及风格。
所以你可以用替换模版来达成这个功能。例如说每份网志可以有吻合自己风格的搜寻结果模版,或者你自己网志的每个版本都可以有它自己的搜寻结果模版。
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$>" />
如果你先前用了 Jay 的搜寻引擎,那么你将会需要把它转换成现在这个整合过的版本。请按照以下的步骤:
所以你得用文字编辑器开启 mt.cfg 和 mt-search.cfg ,然后把所有 mt-search.cfg 内的内容复制到 mt.cfg 里。
AltTemplate1 work work.tmpl
那么你就应该要把它改成
AltTemplate work work.tmpl
TemplateDir /path/to/search_templates
那么你就应该要把它改成
SearchTemplatePath /path/to/search_templates