0

これらは、メニューをエコーするために使用した2つの関数です。

function loop_array($array = array(), $parent_id = 0) {
    if (!empty($array[$parent_id])) {
    // echo '<ul>';
        foreach ($array[$parent_id] as $items) {
            echo '<li><a class = "parent"><span>';
            echo $items['label'];
            echo '</span></a>';
            loop_array($array, $items['id']);
            echo '</li>';
        }
        echo '</ul>';
    }
}

function display_menus($menu_items) {
// var_dump($menu_items);
    $array = array();
    foreach ($menu_items as $rows) {
        $array[$rows['parent']][] = $rows;
    }
    loop_array($array);
}

次に、出力のhtmlコードは次のようになります

<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'>
    <div id="menu"> 
        <ul class="menu">
            <li><a class = "parent"><span>Home</span></a></li><li><a class = "parent"><span>Code</span></a><li><a class = "parent"><span>PHP</span></a><li><a class = "parent"><span>Scripts</span></a><li><a class = "parent"><span>Archive</span></a><li><a class = "parent"><span>Snippet</span></a></li></ul></li></ul></li><li><a class = "parent"><span>Help</span></a></li></ul></li><li><a class = "parent"><span>CSS</span></a></li></ul></li><li><a class = "parent"><span>Contact</span></a></li></ul>        </ul>
    </div>
</div>

しかし、私はこれを次のようにする必要があります

<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'>
<div id="menu">
    <ul class="menu">
        <li><a href="index" class="parent"><span>HOME</span></a>
            <div><ul>
                <li><a href=""><span>Vertical Menu</span></a>
                <li><a href=""><span>Slide show</span></a>
        </li>
        <li><a href="#" class="parent"><span>ABOUT US</span></a></li>
        <li><a href="news"><span>NEWS</span></a></li>
        <li class="last"><a href="#"><span>ACADEMICS</span></a></li>
        <li class="last"><a href="#"><span>PROGRAMME</span></a></li>
        <li class="last"><a href="#"><span>ADMISSIONS</span></a></li>
        <li class="last"><a href="courses"><span>COURSES</span></a></li>
        <li class="last"><a href="contact_us"><span>CONTACT US</span></a></li>
        <li class="last"><a href="feedback"><span>Feedback</span></a></li>
    </ul>
</div>

誰でも私にこれを行う方法を教えてもらえますか?

4

1 に答える 1

1

あなたのターゲット コードは、(閉じた html タグではなく) そもそも不完全な html であり、それが本当に必要なのか、それとも欲しいものなのか、つまり、本当に究極の正しい形なのか、私にはわかりません。

さらに、問題を明確に定式化し、コードを (1 行ではなく) 読みやすい形式にすると、他の人は、そもそもあなたが何を望んでいるのかを理解するために時間を無駄にする必要がなくなります。

内部ノード(つまり、子を持つノード、または「親」)とターミナルノード(つまり、「最後の」要素)を区別して出力したいツリー状/マルチレベルメニューがあると仮定します。

あなたの *display_menus* 関数は、メニュー項目をその親メニュー ID でグループ化し、正しいようです。

あなたの *loop_array* 関数はほとんどそこにあるようです:

function loop_array($array = array(), $parent_id = 0)
{
    if (!empty($array[$parent_id]))
    {
        echo "\n<ul>";
        foreach ($array[$parent_id] as $items)
        {
            // is it a terminal node?
            if (empty($array[$items['id']]))
            {
                $class = 'last';
            }
            else
            {
                $class = 'parent';
            }

            // is there a link?
            if (empty($items['my-link-field']))
            {
                $link = '#';
            }
            else
            {
                $link = $items['my-link-field'];
            }

            // if you do not divide your output string into several statements,
            // the code becomes more readable
            // I mean
            // it
            //                            feels 
            //         like
            //                   several
            //  fragments
            //          that
            //                       must
            // be seen, understood and put into context. Which -in any language- is just easier with a nice flow.

            echo "<li><a class='{$class}' href='{$link}'><span>{$items['label']}</span></a>";

            loop_array($array, $items['id']);

            echo "</li>\n";
        }
        echo "</ul>\n";
    }
}

それでも目的の結果が得られない場合は、データ ($menu_items) が正しく設定されていないと思います。すでにチェック済みのように見えるので (var_dump にコメント)、loop_array に渡されたデータ、つまり $array をチェックすることをお勧めします。

于 2013-08-24T08:09:19.427 に答える