проблема
$ Smarty-> register_function () и {make_menu parent_id = $ P.menu_bilder_data} заставляют вызывать функцию с помощью ($ params, $ smarty)
где $ params =
array(
'parent_id' => array(
0 => array(
1 => > "menu item 1",
)
Это не та структура данных, которую ожидает функция.
Решение
Вы можете вызвать функцию, не используя "register_function"
{$P.menu_bilder_data|@make_menu}
Труба "|" передаст $ P ['menu_bilder_data'] в качестве первого аргумента функции. И "@" заставляет канал передавать массив. Без "@" функция была бы вызвана для всех элементов в массиве.
Просто совет
Измените параметр с $ parent (который является массивом) на $ parent_id. Все данные меню доступны из глобального меню $.
function make_menu($parent_id)
{
global $menu;
if (!isset($menu[$parent_id])) {
return;
}
$nodes = $menu[$parent_id];
echo '<ul>';
foreach($nodes as $menu_id => $menu_name)
{
echo '<li>'.$menu_name ;
make_menu($menu_id) ;
echo '</li>';
}
echo '</ul>';
}
Из смарта:
{0|make_menu}