CMSMS(“CMS Made Simple”)用户定义的标签仅适用于部分?

时间:2011-02-06 15:38:07

标签: php content-management-system smarty cmsmadesimple

CMSMS有一个非常奇怪的问题 - 为什么这就是HALF-working:

<head>
{if $current_step=='2' or $current_step=='4'}
HEAD_ON
{else}
HEAD_FAIL
{/if}
</head>
{if $current_step=='2' or $current_step=='4'}
NEITHER_ONE_OK
{else}
NEITHER_ONE_FAIL
{/if}
<body>
{if $current_step=='2' or $current_step=='4'}
BODY_OK
{else}
BODY_FAIL
{/if}
</body>

返回:

HEAD_OK
NEITHER_ONE_FAIL
BODY_FAIL

我使用最新的CMSMS版本 - 1.9.3。 CMSMS基于smarty,允许在CMSMS UDT部分执行此操作:

$gCms->smarty->assign('current_step',"".htmlspecialchars($_GET['step_id'])."");

如果CMSMS使用一些方法首先解释主体部分,然后编译UDT,然后编译整个网站,我认为这个问题是可能的。

任何解决方案?谢谢。

3 个答案:

答案 0 :(得分:1)

CMSMS以几乎相反的顺序处理模板。

从1.4的发行说明:http://www.cmsmadesimple.org/cgblog/818/Announcing-CMS-Made-Simple-1-4-Jamaica/

* We split the template into three pieces
a) Any text ontop of 
b) The section
c) the rest of the template (the body)

答案 1 :(得分:1)

是的,有一个解决方案。

您应该使用smarty捕获内容部分和其他调用,以便随处可用变量。

在模板的顶部使用:

{capture assign='cc'}{content}{/capture}

并替换{$ cc}

的{content}标记

这样,在处理头部之后,任何变量定义在页面内容上的UDT调用中都可用于模板的其余部分。

查看这个旧指南,从头到尾获取一些变量,你就会明白它是如何工作的:

http://forum.cmsmadesimple.org/viewtopic.php?f=4&t=30475&sid=ed7e25c50612eb9f052ec4bee16d782c

答案 2 :(得分:0)

来自CMSMS开发团队的回答:“CMSMS(默认情况下)首先处理上面的内容,然后处理部分,然后处理头部,并在输出之前将结果粘合在一起。”