smarty块名可以从smarty变量派生吗

Posted

技术标签:

【中文标题】smarty块名可以从smarty变量派生吗【英文标题】:Can smarty block names be derived from smarty variables 【发布时间】:2012-10-09 22:02:35 【问题描述】:

我想根据 smarty 数据定义 smarty 块名称,但我似乎做不到。 示例:

foreach $array as $code
  block name=block_$code
     <div id='$code'></div>
  /block
/foreach

我的目的是通过子模板扩展特定的 block_$code 块。这是可能的还是我可以使用其他技巧来做到这一点?

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用assign 块和cat 修饰符。例如

foreach $array as $code
    assign var=foo value="block_"|cat:$code
    block name=$foo
        <div>
    /block
/foreach

注意我没有对此进行测试,但它应该可以工作。您也可以将其短路并使用block name="block_"|cat:$code

【讨论】:

我试过了,它似乎无法识别变量中定义名称的块。 很奇怪。后一种形式呢? 不。要么它根本不创建块,要么块的名称不明显。我在想带有 block 定义元素的东西不允许任何动态值。我尝试做block name="block_"|cat:$code 之类的事情,但也没有用。 奇怪,assign 应该可以做到。恐怕我没有主意了。【参考方案2】:

我能够找到 2011 年的以下链接,表明当时不可能。我怀疑它仍然不是:

http://www.smarty.net/forums/viewtopic.php?t=19805&highlight=block%20variable%20name

好消息是我能够弄清楚如何在没有它的情况下使我的代码工作。我希望能够仅覆盖由 foreach 定义的 div 之一。我可以这样做:

家长:

foreach $array as $code
    block name=code_loop
        <div>Normal Stuff</div>
    /block
/foreach

孩子:

block name=code_loop
    if $code == 'code of interest'
        <div>New Stuff</div>
    else
        $smarty.block.parent
    /if
/block

【讨论】:

以上是关于smarty块名可以从smarty变量派生吗的主要内容,如果未能解决你的问题,请参考以下文章

php中smarty怎么赋值变量到模板

Smarty模本引擎

Smarty内置函数之config_load

smarty 变量调节器

PHP Smarty 模板 读取配置文件变量

Smarty模板中使用getpostrequestcookiessession变量的方法