Smarty编译器:语法错误未知标记

时间:2017-07-06 14:58:08

标签: php smarty

我在menu中有一个名为parent.tpl的函数:

{function menu level=0}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      <li>{$entry@key}</li>
      {menu data=$entry level=$level+1}
    {else}
      <li>{$entry}</li>
    {/if}
  {/foreach}
  </ul>
{/function}

我想在menu

中使用此child.tpl功能
{extends file='./base.tpl'}

{block name=head}
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
{/block}

{block name=body}
    {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
    ['item3-3-1','item3-3-2']],'item4']}
    {menu data=$menu}
{/block}

但是聪明的错误:

:  Uncaught  --> Smarty Compiler: Syntax error in template "file:/Users/yangchangshu/smarty/child.tpl"  on line 11 "{menu data=$menu}" unknown tag "menu" <-- 
  thrown in 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

根据继承模板的性质处理父模板在链中最后处理。因此,在编译子模板时,{menu}未定义。 解决方法: 把{function menu ....}放在子模板中,然后{include}它 {block name = body}