Smarty模板继承只提供局部范围变量?

时间:2012-08-14 16:15:58

标签: smarty scope

使用最新版本的Smarty 3和模板继承我想在子模板中设置一个变量并在父模板中使用它:

list.tpl

{extends file="page.tpl"}

{block name="head"}
    {$page_var = array("abc", "xyz")}
{/block}

{block name="content"}
    <div>...</div>
{/block}

page.tpl

<!DOCTYPE html>
<html>
<head>
    {block name="head"}
        {$page_var = array()}
    {/block}

    {mytemplatefunc foo=array("bar") + $page_var}
    ...

主页面模板初始化变量,子页面根据需要设置变量。然后,主页面模板在调用模板函数时将使用该变量。但是$page_var总是空的。 就像模板变量的范围始终是本地的一样。回到{include}唯一的解决方案吗?

我已尝试{assign scope='global'}{assign scope='parent'},即使它们是用于包含的。我也尝试使用自己的静态类方法和变量(挂起值)但它永远不会工作。在其他地方,有人建议尝试使用{block}之外的变量,但这直接反对文档。

1 个答案:

答案 0 :(得分:0)

为什么要在Template Extension(list.tpl)中重新定义$ page_var?

您是否尝试过将值添加到原来的$ page_var?

所以而不是

$page_var = array("abc", "xyz")

你可以做到

array_push($page_var, "abc", "xyz")