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

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

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

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

谢谢。

【问题讨论】:

    标签: php smarty block


    【解决方案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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-05-29
      • 1970-01-01
      • 2011-05-18
      相关资源
      最近更新 更多