0

私の問題私はこのコードで無限のメニューを持っています

        $result=db::query_tpv("SELECT * FROM  tpv_link");
while($row = db::fetch_array($result,'assoc'))
 {

$menu[$row['parent_id']][$row['id_link']] = $row['name_link'];

}
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} によって samrty でも動作していますが、この関数をキャンセルして smarty でこれに変更したい (define $menu)

{function name=menu level=0}
        <ul>
            {foreach $data as $items}
                <li>
                    <a href="{$items.url}">
                        {$items.title}
                    </a>
                    {if is_array($items.submenu)}
                        {menu data=$items.submenu level=$level+1}
                    {/if}
                </li>
            {/foreach}
        </ul>
    {/function}
{menu data=$menuItems}

これで、Smarty で再帰関数で作成された配列変数を foreach する方法が機能し ません.....

4

1 に答える 1

0

こんにちは、3日後に解決策を見つけました

ここ

------------まずクエリを作成するテーブル---------- 例:

    $result=db::query_tpv("SELECT * FROM  tpv_link");
  while($row = db::fetch_array($result,'assoc'))
 {

 $menu[]=$row ;
 }

------------Secound はこの関数を使用します (pyrimd 配列を作成するため)---------- ------------ Note change id,parentid ----------

   function buildTree(array $elements, $parentId = 0) {
$branch = array();

foreach ($elements as $element) {
    if ($element['parent_id'] == $parentId) {
        $children = buildTree($elements, $element['id_link']);
        if ($children) {
            $element['children'] = $children;
        }
        $branch[] = $element;
    }
}

return $branch;
}

-------------------Smartyテンプレート前------------------

$tree = buildTree($menu);//$menu array all data From Query
$smarty->assign('menu',$tree);

--------------smartyテンプレート内-------------------------

   {function name=menu level=0}
        <ul>
            {foreach $data as $items}
                <li>
                    <a href="{$items.url}">
                        {$items.name_link}
                    </a>
                    {if $items.children}
                        {menu data=$items.children level=$level+1}
                    {/if}
                </li>
            {/foreach}
        </ul>
    {/function}


    {menu data=$menu}
于 2013-02-08T04:57:08.727 に答える