首页 文章

Resurive函数调用用户在smarty插件目录中创建的smarty函数

提问于
浏览
0

我想在smarty插件目录中编写一个smarty函数 . 它是一个递归函数 . 它在普通的php文件中运行良好,并会生成一个下拉选择框 . 现在我想使它成为一个聪明的功能,并希望从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()

我怎么解决这个问题?

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;
    }
    

相关问题