分析 MT
你可以看看这篇文章:http ://www.movabletype.org/2008/10/making_it_easier_to_debug_and_test_your_templates.html
我没有在 5.X 中使用它,所以我不能告诉你它是否仍然有效,但我很想知道。
模板示例
使用包含 15,000 个条目和 20 个类别的测试博客,我无法让您的第一个代码块正常工作。首先,我希望您需要测试所有条目,而不仅仅是最后 3 个,以确保结果是严格的。也许一个真正古老的条目是第一个共享这两个类别的条目。
我修改了您的两个代码块,以获得我认为您想要的输出,即列出每个类别的最后一个条目,这些条目也共享一个给定类别(在您的情况下,“漫画”,但在我的测试中,“热门故事”) .
在我的 5.13 安装中,我发现两者之间存在差异mt:EntryIfCategory
,mt:IfCategory
尽管文档指出前者已被弃用,而有利于后者。
当我运行这段代码时:
<mt:Categories>
<mt:Var name="show" value="1">
<mt:Entries lastn="99999">
<mt:If var="show" eq="1">
<mt:IfCategory label="Top Story">
Hello, <$mt:EntryTitle$>
<mt:Var name="show" value="0">
</mt:IfCategory>
</mt:If>
</mt:Entries>
</mt:Categories>
我只得到了其中Categories
一次迭代的输出,即外部类别与内部类别匹配的迭代。我在想IfCategory
是测试外Category
循环的类别,而不是内Entries
循环的类别。当我更改为 时EntryIfCategory
,它按预期工作。
所以我的最终代码是这样的(包括我用于计时的一堆代码):
<mt:Section regex_replace="/^[\s]*$/mg","" regex_replace="/\n\n/mg","\n">
<mt:SetVarTemplate name="timingstart">
<$mt:Date format="%H" setvar="hours"$>
<$mt:Date format="%M" setvar="minutes"$>
<$mt:Date format="%S" setvar="seconds"$>
<$mt:Var name="hours" op="*" value="3600" setvar="hourseconds"$>
<$mt:Var name="minutes" op="*" value="60" setvar="minuteseconds"$>
<$mt:Var name="totalseconds" value="$hourseconds"$>
<$mt:Var name="totalseconds" op="+" value="$minuteseconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" op="+" value="$seconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" setvar="startseconds"$>
</mt:SetVarTemplate>
<mt:SetVarTemplate name="timingstop">
<$mt:Date format="%H" setvar="hours"$>
<$mt:Date format="%M" setvar="minutes"$>
<$mt:Date format="%S" setvar="seconds"$>
<$mt:Var name="hours" op="*" value="3600" setvar="hourseconds"$>
<$mt:Var name="minutes" op="*" value="60" setvar="minuteseconds"$>
<$mt:Var name="totalseconds" value="$hourseconds"$>
<$mt:Var name="totalseconds" op="+" value="$minuteseconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" op="+" value="$seconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" setvar="finishseconds"$>
<$mt:Var name="finishseconds" op="-" value="$startseconds" setvar="elapsedseconds">
This code block completed in <mt:If name="elapsedseconds" eq="0">less than 1 second<mt:Else name="elapsedseconds" eq="1">1 second<mt:Else><$mt:Var name="elapsedseconds"$> seconds</mt:If>.
</mt:SetVarTemplate>
++++++++++++++++++++++++++++++++++++++++++
<$mt:Var name="timingstart"$>
<mt:Categories>
<mt:Var name="show" value="1">
<mt:Entries lastn="99999">
<mt:If var="show" eq="1">
<mt:EntryIfCategory label="Top Story">
Hello, <$mt:EntryTitle$>
<mt:Var name="show" value="0">
</mt:EntryIfCategory>
</mt:If>
</mt:Entries>
</mt:Categories>
<$mt:Var name="timingstop"$>
++++++++++++++++++++++++++++++++++++++++++
<$mt:Var name="timingstart"$>
<mt:Categories>
<mt:SetVarBlock name="cats"><$mt:CategoryLabel$> AND Top Story</mt:SetVarBlock>
<mt:Entries lastn="1" category="$cats">
Hello, <$mt:EntryTitle$>
</mt:Entries>
</mt:Categories>
<$mt:Var name="timingstop"$>
++++++++++++++++++++++++++++++++++++++++++
</mt:Section>
我的输出在两个块中都匹配:
++++++++++++++++++++++++++++++++++++++++++++
你好,冰球场亮绿灯
你好,法官驳回集体谈判法
你好,ALRC 探索市中心的酒吧
你好,法官驳回集体谈判法
你好,无证学生:州内学费对 1 名威斯康星大学学生意味着什么你好,
为正当理由冻结
你好,Dems 推动沃克健康关怀计划
你好,学生会着手 WISPIRG 立法
你好,威斯康星大学校园选民身份证法案可能的好处,缺点
你好,集会激起群众夺回威斯康星州
你好,主要的冬季风暴席卷麦迪逊
你好,照片:2011 届毕业生
您好,奥巴马周一访问麦迪逊
您好,ASM 准备接受 MCSC 的最终上诉
您好,奥巴马周一访问麦迪逊
您好,共和党领导层任命约翰逊为 3 个主要委员会成员
您好,杰米汤姆森获得胚胎研究全球奖
您好,推荐工作组新板
你好,教员权衡人力资源重新设计计划
你好,拉力赛激起人群收回 Wis。
这个代码块在 18 秒内完成。
++++++++++++++++++++++++++++++++++++++++++++
你好,冰球场亮绿灯
你好, 法官废除集体谈判法
你好,ALRC 探索市中心的酒吧
你好,法官废除集体谈判法
你好,无证学生:州内学费对 1 名威斯康星大学学生意味着什么
你好,出于正当理由冻结
你好,民主党推动 Walker 实施医疗保健计划你好
,
学生会着手 WISPIRG 立法
威斯康星大学校园
你好,集会激起群众夺回威斯康星州。
你好,主要冬季风暴席卷麦迪逊
你好,照片:2011 届毕业生
你好,奥巴马周一访问麦迪逊
你好,ASM 准备接受最终的 MCSC 上诉
你好,奥巴马周一访问麦迪逊
你好,共和党领导层任命约翰逊为 3 个主要委员会成员
你好,杰米·汤姆森 (Jamie Thomson) 获得胚胎研究全球奖
你好,推荐新板的工作组
你好,教师权衡人力资源重新设计计划
你好,拉力赛激起人群回收 Wis。
这个代码块在 12 秒内完成。
++++++++++++++++++++++++++++++++++++++++++++++
请注意,在此安装中,第二个块的运行速度比第一个块快三分之一。为了与您的 152 秒值进行比较,这是我使用 20 个类别和 15,000 个条目所花费的十倍,我需要更多地了解您拥有多少个类别和条目。