我使用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}
但这会产生完全相同的结果。 一些提示和/或解决方法?非常感谢。
答案 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}