if / elseif和switch语句在smarty 3中无法正常工作

时间:2014-08-10 21:57:17

标签: html5 templates smarty smarty3

我使用smarty templaates引擎。我在这种情况下:

{extends file="base.tpl"}
    {if $title_block=="something"}
        {block name="button_blocco_1"} class="active"{/block}
    {elseif $title_block=="somethingelse"}
        {block name="button_blocco_2"} class="active"{/block}
    {elseif $title_block=="someother"}
        {block name="button_blocco_3"} class="active"{/block}
    {/if}
    {block name="content"}
        {* BODY OF THE PAGE HERE *}
    {/block}
{/extends}

这不起作用,因为当我加载页面时,所有树按钮都处于活动状态。所以我尝试安装一个交换机插件(Jeremy Pyne')并以这种方式更改我的代码:

{extends file="base.tpl"}
    {switch var=$title_block}
        {case value="sonething" break}
            {block name="button_blocco_1"} class="active"{/block}
        {case value="somethingelse" break}
            {block name="button_blocco_2"} class="active"{/block}
        {case value="someother" break}
            {block name="button_blocco_3"} class="active"{/block}
    {/switch}
    {block name="content"}
        {* BODY OF THE PAGE HERE *}
    {/block}
{/extends}

但这会产生完全相同的结果。 一些提示和/或解决方法?非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您查看Smarty 3的文档,您会注意到:

  

模板继承是一个创建单个的编译时进程   编译模板文件。与基于的相应解决方案相比   它包含在{include}标记中的子模板确实有更好的效果   渲染时的表现。

所以Smarty不会检查任何其他只是编译{block}而且就是这样。这就是为什么即使你将{block}置于任何条件之内也不会改变任何东西。

解决方法是从子主题中删除块并在base.tpl中简单地使用

<button {if $title_block eq 'something'}class="active"{/if}>test button</button>
<button {if $title_block eq 'somethingelse'}class="active"{/if}>test button2</button>
<button {if $title_block eq 'someother'}class="active"{/if}>test button3</button>

另一个解决方案(更清洁)将使用include并传递您想要比较的值。在base.tpl文件中,您可以放置​​:

<button {include 'active.tpl' compare="something"}>test button</button>
<button {include 'active.tpl' compare="somethingelse"}>test button2</button>
<button {include 'active.tpl' compare="someother"}>test button3</button>

并在active.tpl档案中:

{if $title_block eq $compare} class="active" {/if}