【发布时间】: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就没有错误。