0

正如我浏览了PhalconVolt 模板引擎提供的文档一样。我发现在Volt Compiler中添加自定义函数来自定义数据。但是关于n 级分层菜单/目录案例,我需要递归,我无法使其工作。请指导我解决这个问题。addFuntion()addFunction()

4

1 回答 1

1

使用递归没问题 - 请记住 volt 被编译为 PHP 文件。volt 函数也是普通的 PHP,所以:

$compiler->addFunction(
    'menu',
    function ($resolvedArgs, $exprArgs) {
        return 'MenuHelper::menu(' . $resolvedArgs . ')';
    }
);

那为什么不呢:

class MenuHelper
{
    public static function menu($data)
    {
        if (empty($data)) {
            return '';
        }
        $out = '<ul>';
        foreach ($data as $name => $children) {
            $out .= '<li>' . $name . self::menu($children) . '</li>';
        }
        $out .= '</ul>';
        return $out;
    }
}

和view.volt:

{{ menu([ 'a' : [ 'a1' : [], 'a1' : ['a11' : [],'a12' : [],'a13' : [] ] ], 'b' : [] ]) }}

会给你:

<ul><li>a<ul><li>a1<ul><li>a11</li><li>a12</li><li>a13</li></ul></li></ul></li><li>b</li></ul>
于 2014-07-18T06:28:42.067 回答