无法删除MT widget 默认module的问题

升级MT3.3 以后多了不少plugin,其中包括Widgets Manager,Widget 这个词最近在Blog 出现频率很高,也不知道到底是何物,今天google了一下,才知道大部分人谈论的Widget 与我要了解的MT Widget 还不是一回事。 这里有篇文章详细介绍:使用Movable Type的Widgets,我就不废话了。只说一个奇怪的问题,Widget Manager 会在Template 的Module 中生成默认的Widget 可以利用的Module,我已经有了很多类似的Module,于是把已有的Module重命名,在名称前面加上"Widget: "...
升级MT3.3 以后多了不少plugin,其中包括Widgets Manager,Widget 这个词最近在Blog 出现频率很高,也不知道到底是何物,今天google了一下,才知道大部分人谈论的Widget 与我要了解的MT Widget 还不是一回事。 这里有篇文章详细介绍:使用Movable Type的Widgets,我就不废话了。只说一个奇怪的问题,Widget Manager 会在Template 的Module 中生成默认的Widget 可以利用的Module,我已经有了很多类似的Module,于是把已有的Module重命名,在名称前面加上"Widget: " 前缀,这样就可以被Widget Manager 识别,然后将默认的全部删除,但是下一次点击Manage my Widgets进入后,这些默认的Module 又会自动生成,没有找到解决办法,最后将我自己的Module修改成与默认的具有相同的名字(大小写敏感),才算了事。

重构MT模板结构

MT默认的模板包含大量的重复或者类似模板代码,当你需要进行一处模板修改时,也许不得不考虑得更多,并在多个模板中同时进行,已达到统一的效果。 模板重构的目的就是尽可能将多个模板之间相同的部分抽象出来,然后在多个模板中进行引用,另外还有趋向于将一组具有相同功能的模板代码放入同一个模板文件 的作用,从而减少模板修改带来的工作量。MT很早就在模板中支持Module,定义好的Module可以通过如下代码进行引用。 <$MTInclude module="Module Name"$> 我 们需要做的就是把重复的模板代码放在一个个Module中进行定义,然后在模板中去引用他们。经过一定的重构,模板的重用性得到一定的改观,但依然会有一 些冗余的代码,除非MT可以提供一些模板标签,能够让我们判断当前所在的模板而采用不同的Module或者调整细微的模板代码差别。幸运的是,我找到了一 个MT plugin,mt-varz version 0.31。 它提供了更高级的变量支持,支持以下模板标签: <$MTGetVar$>,...

MT默认的模板包含大量的重复或者类似模板代码,当你需要进行一处模板修改时,也许不得不考虑得更多,并在多个模板中同时进行,已达到统一的效果。 模板重构的目的就是尽可能将多个模板之间相同的部分抽象出来,然后在多个模板中进行引用,另外还有趋向于将一组具有相同功能的模板代码放入同一个模板文件 的作用,从而减少模板修改带来的工作量。MT很早就在模板中支持Module,定义好的Module可以通过如下代码进行引用。

<$MTInclude module="Module Name"$>

我 们需要做的就是把重复的模板代码放在一个个Module中进行定义,然后在模板中去引用他们。经过一定的重构,模板的重用性得到一定的改观,但依然会有一 些冗余的代码,除非MT可以提供一些模板标签,能够让我们判断当前所在的模板而采用不同的Module或者调整细微的模板代码差别。幸运的是,我找到了一 个MT plugin,mt-varz version 0.31。 它提供了更高级的变量支持,支持以下模板标签:

<$MTGetVar$>, <MTSetVarBlock>, <MTIf>, <MTUnless>, <MTIfOne>, <MTUnlessEmpty>, <MTUnlessZero>

其中部分标签在MT3.3中已经得到支持, mt-varz对其进行了over load,具体细节可以参考此plugin文档(在下载包内)。我们在这里需要用到MT标准标签MTSetVar,以及mt-varz 支持的MTIf 标签。我在每个模板的第一行使用MTSetVar 定义一个变量用于标识当前模板,然后在Module中需要的地方使用MTIf 判断当前模板,并注入相应模板代码。下面是一个例子:

Template: Category Archive

<$MTSetVar name="Category Archive" value="1"$> 
...
<$MTInclude module="Header"$>
...

Template Module: Header

<head>
<MTIf name="Category Archive">
<title><$MTBlogName encode_html="1"$>: <$MTArchiveTitle$> Archives</title>
</MTIf>
...
</head> 
<$MTSetVar name="Category Archive" value="1"$> 这里value 可以是其它非0值,如果值为1,那么MTIfOne 标签在上面与MTIf 标签的作用相同,加以利用可以进行更精细的控制。除了1以外,目前还不提供对变量值的详细判断。

经过重构之后,我的Main Index 模板看起来就像这个样子,其它也很类似,模板修改主要在少量的Module中进行。

<$MTSetVar name="Main Index" value="1"$>
<$MTInclude module="Template Header"$> 
<$MTInclude module="Header"$>  
<MTEntries>
<$MTInclude module="Entry"$>
</MTEntries>
<$MTInclude module="Footer"$>
<$MTInclude module="Template Footer"$>  

更新:经测试,<MTIfOne> 标签不能正确的解析内嵌的<MTElse> 标签,根据不同情况,将在模板rebuild 阶段抛出错误,或者rebuild 通过,但逻辑不符合嵌套关系。下面是一个逻辑错误示例。<MTIf>标签是否存在此问题未作测试。已经report 这个bug 给了Appnel,希望可以解决。

<MTIfOne name="Search Result Template"><MTIfTagSearch>Tag Search<MTElse>None Tag Search</MTElse></MTIfTagSearch></MTIfOne>

mail.png


标签订阅|Tag Subscription

If you use an RSS reader, you can subscribe to a feed of all future entries tagged '模板'. [What is this?]

Subscribe to feed Subscribe to feed

最近更新|Recent Entries

不定期更新|Handy Entries

其它标签|Other Tags

分类栏目|Categories

按月归档|By Month

2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

站内链接|Site Links

Powered by
Movable Type 3.34