2017-07-06 3 views
0

は私がparent.tplmenuという名前の関数を持っている:Smartyのコンパイラ:構文エラー、未知のタグ

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

私は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} 

しかし、Smartyのエラーでこのmenu機能を使用したい:

: 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

あなたは 'parent.tpl'で関数を定義したとしますが、子テンプレートは 'base.tpl'を拡張します。これはタイプミスですか? – iainn

答えて

0

継承テンプレート処理の性質によって、親テンプレートはチェーン内で最後に処理されます。したがって、子テンプレートがコンパイルされるときに{menu}は未定義です。 対処方法: サブテンプレートに{function menu ....}を入れて{include}それを{include} {block name = body}

関連する問題