【问题标题】:Smarty template inheritance only provides local scope variables?Smarty 模板继承只提供局部范围变量?
【发布时间】:2012-08-14 16:15:57
【问题描述】:

使用带有模板继承的最新版本 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} 之外的变量,但这直接违反了文档。

【问题讨论】:

  • 您确定默认值允许使用表达式:{templatefunc param=array("def") + $page_var}
  • 是的,只要定义了$page_var就没有错误。

标签: smarty scope


【解决方案1】:

为什么要在模板扩展 (list.tpl) 中重新定义 $page_var?

您是否尝试过向原始 $page_var 添加值?

所以不是

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

你可以的

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

【讨论】:

  • 如果您在 list.tpl 中有头块,page.tpl 中的头块不会运行,所以我得到array_push() expects parameter 1 to be array
猜你喜欢
  • 2011-08-24
  • 2014-07-26
  • 2015-09-08
  • 2015-02-04
  • 1970-01-01
  • 2014-05-02
  • 2011-12-19
  • 1970-01-01
  • 2022-06-12
相关资源
最近更新 更多