MovableType 菜单指示当前栏目的三种方法
@如果不是正在使用 Movable Type ,看这篇文章就很无趣而且有可能根本看不懂了。而且标题本身就说的有点晕,我其实想表达的意思短话长说就是:在页面的菜单条里,用特殊标记来指示当前页面所属的栏目。
如果还是没说明白……好吧,直接以本站为例贴图说明一下。当你浏览站点说明页面时,菜单的样式是这样子滴:

菜单里的 about 栏目被加重显示了,这样就有利于访客明白自己所处在网站的什么位置。所以虽然在 Movable Type 里实现起来有些麻烦还是有必要折腾一下的。下面就开始。
第一种方法是MT默认模板里使用的方法。这种方法的原理是利用声明变量来查询当前正在重建的页面是菜单中的哪个栏目,然后加上相应标记。
1、在页面归档模板的最顶端加入:
<mt:SetVarBlock name="nav_on"><$mt:PageID$></mt:SetVarBlock>
这样就在发布页面时动态声明一个名为nav_on的变量,变量的值等于正在生成的页面的ID号码。
2、在模板里的菜单栏目部分同样设置一个变量:
<mt:SetVarBlock name="this_page_id"><$mt:PageID$></mt:SetVarBlock>
如果这个this_page_id和页面顶端设置的变量nav_on相等,就给该栏目加上一个CSS类:
<li class="<mt:If name="nav_on" eq="$this_page_id"> on</mt:If>">
第二种方法是本站以前用的方法。这个比较简单,但是比较不智能,需要手动匹配栏目名称,而且需要你的栏目是单独建立了文件夹路径的。比如about栏目的模板:
<li class="<MTIf tag="FolderBasename" eq="about"> on</mt:If>"><a href=”/about/”>about</a></li>
解释一下就是,如果正在建立的页面所处在about文件夹下,那么该条就添加一个css类。
第三种方法本站现在正在用。给菜单单独建立一个模板,每个栏目分配一个固定的ID(比如#nav_about和#nav_contact)。而在菜单外层,通过判断(类似第一种方法)给每个页面的菜单分配一个相应class的div包裹(比如.page_about和.page_contact)。然后通过CSS样式表给特定组合的菜单栏目定义特殊样式。
.page_about #nav_about {color:red;}
这样就可以把菜单模板cache起来,从而提升页面重建的效率。
好了,如果不用 Movable Type ,这篇文章根本看不明白,所以我也不再多说了,就到这里把。
~~~~~~~~~~~~~~~~~~~~~~~分~~割~~~~~~~~~~~~~~~~~~~~~~~~~~·
在使用MT的“分类文章月度归档”功能的时候有可能会碰到:Can't call method "date_based" on an undefined value. 的错误提示,经一番折腾,我在一个日本人的blog里发现了问题的原因,他说要解决这个应该“MTArchiveCountをMTCategoriesにしたら直った”据 wayne 同学帮我翻译是“把MTArchiveCount改成MTCategories”但是根据我的理解,应该是用MTCategoryCount来替换MTArchiveCount才对。果然,替换之后问题解决了。特此记录。
fin.
页面会变得很长么?期待。
wayne 2009-03-18,01:05 says: “回复”
呃...括号后面大概就这个意思吧, 没怎么用过mt, 也搞不清楚状况...
wayne 2009-03-18,01:06 says: “回复”
今儿刚刚好没被沙发挡住, 完美了, 哈哈哈哈
dimlau 2009-03-18,02:15 says: “回复”
坐等师太来鄙视你
fei 2009-03-18,11:55 says: “回复”
我昨天下了个MT,竟然不会装……
dimlau 2009-03-18,12:23 says: “回复”
我刚开始也不会装
Movable Type安装笔记
关键是程序和blog的路径问题搞清楚就好了
阿醜 2009-03-20,15:21 says: “回复”
hi dimlau
新的mt(4.25)就有motion
在新增網站的時候選擇motion模版就可以嚕
我自己有二個motion網站
www.nagoo.info/game
www.ldope.com/motion
還滿好玩的^^
dimlau 2009-03-20,15:38 says: “回复”
啊,大陆无法访问MT的com网站,所以我竟然不知道4.25已经发布了
谢谢,马上试用一下
CcChen 2009-03-21,22:57 says: “回复”
他用的是pro版,需要花钱的
dimlau 2009-03-22,02:15 says: “回复”
你也被6A的版本搞晕了吧,哈哈
Pro是不花钱的啊
Business、Enterprise才收费呢
CcChen 2009-03-22,23:20 says: “回复”
啊,怎么我的是Movable Type Open Source....难道....现在感觉有很多个版本在流通,不知道各版本的区别
CcChen 2009-03-21,22:56 says: “回复”
我觉得设置变量方式实用很多.我就是这样做的
leavic 2009-03-22,22:26 says: “回复”
嗯,过来表现一下我的孤陋寡闻了。
Pro版,我差点也以为收费的。
你说的那个Motion,唉,我今天把blog搬回国内的时候连.cgi文件要改属性才能运行都忘了,恢复当年的折腾功力估计还需要时日。
dimlau 2009-03-23,00:16 says: “回复”
那个很自动化啊,不折腾,呵呵呵
@CcChen Open Source(面向开发者)和Pro(面向个人)都免费,其他收费。我以前也用Open Source,4.24时刚刚转到Pro
莫良 2009-03-25,00:25 says: “回复”
不折腾...不折腾...
锐风 2009-05-01,12:29 says: “回复”
我是一看标题就懂了.. 呵呵..
dimlau 2009-05-02,14:53 says: “回复”
经常折腾模版的话应该是很容易明白的
PS.你的域名废了?