0

smarty プラグイン ディレクトリ内に smarty 関数を記述しようとしています。これは再帰関数です。これは通常の php ファイルでうまく機能し、ドロップダウン選択ボックスを生成します。今はsmarty関数にしてtplから呼び出したいと思っています。

            <?php
        /*
        * Smarty plugin
        * ————————————————————-
        * File:     function.recurse_array.php
        * Type:     function
        * Name:     recurse_array
        * Purpose:  prints out elements of an array recursively
        * ————————————————————-
        */

        function smarty_function_recurse_array($arr,$depth=0, &$smarty)
        {
            $html = '';
                    foreach ( $arr as $v ) {

                        $html.= '<option value="' . $v['id'] . '">';
                        $html.= str_repeat('-', $depth);
                        $html.= $v['cata_name'] . '</option>' . PHP_EOL;

                        if ( array_key_exists('subcategories', $v) ) {
                            $html.= smarty_function_recurse_array($v['subcategories'], $depth+1);
                        }
                    }

                    return $html;
        }

このファイルは smarty プラグイン ディレクトリに保存されており、次のように呼び出します。

{recurse_array array=$myarray}

今、再帰呼び出し関数の引数セクションについて混乱しています

$html.= smarty_function_recurse_array($v['subcategories'], $depth+1);

次のような警告を生成します

Warning: Missing argument 3 for smarty_function_recurse_array()

どうすればこれを解決できますか?

4

1 に答える 1

0

これを試して:

<?php

/*
* Smarty plugin
* ————————————————————-
* File:     function.recurse_array.php
* Type:     function
* Name:     recurse_array
* Purpose:  prints out elements of an array recursively
* ————————————————————-
*/

function smarty_function_recurse_array($params, &$smarty)
{
    $depth = isset($params['depth'])?$params['depth']:0;

    $html = '';
    foreach ( $params['array'] as $v ) {    
        $html.= '<option value="' . $v['id'] . '">';
        $html.= str_repeat('-', $depth);
        $html.= $v['cata_name'] . '</option>' . PHP_EOL;

        if ( array_key_exists('subcategories', $v) ) {
            $html.= smarty_function_recurse_array(array ('array' => $v['subcategories'], 'depth' => $depth + 1), $smarty);
        }
    }

    return $html;
}
于 2013-04-21T17:18:37.277 に答える