Php CMSMS(“CMS变得简单”)用户定义的标记仅在<;头>;部门?

Php CMSMS(“CMS变得简单”)用户定义的标记仅在<;头>;部门?,php,content-management-system,smarty,cmsmadesimple,Php,Content Management System,Smarty,Cmsmadesimple,我对CMSMS有一个非常奇怪的问题-为什么这会起到一半作用: <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 $curren

我对CMSMS有一个非常奇怪的问题-为什么这会起到一半作用:

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

$gCms->smarty->assign('current_step',"".htmlspecialchars($_GET['step_id'])."");
我想,如果CMSMS使用某种方法,首先解释正文部分,然后编译UDT,然后编译整个网站,这个问题是可能的


有什么解决办法吗?谢谢。

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

从1.4的发行说明中:


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

是的,有一个解决方案

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

在模板顶部使用:

{capture assign='cc'}{content}{/capture}
并替换{$cc}的{content}标记

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

查看这本旧指南,从身体到头部获取一些变量,您将了解其工作原理:

来自CMSMS开发团队的回答:“CMSMS(默认情况下)首先处理上述内容,然后是部分,然后是头部部分,并在输出前将结果粘在一起。”
* We split the template into three pieces
a) Any text ontop of 
b) The section
c) the rest of the template (the body)
{capture assign='cc'}{content}{/capture}