0

ブーストラップを統合しようとしていますが、よくわからないことに直面しています... PHP。基本的に必要なのは、class="nav" を ul に追加し、class="dropdown-menu" をサブメニュー ul に追加することですが、nav クラスを 2 回繰り返しています。これがコードです。助けてくれてどうもありがとう!

<div class="navbar navbar-inverse">
<div class="navbar-inner">
    <div class="navbar">
        <!-- menu start -->
        <ul class="nav" id="nav">
            <li  class="level0"> <a class="dropdown-toggle" href="#"   class=""><span>Dashboard</span></a></li>
            <li onmouseover="Element.addClassName(this,'over')" onmouseout="Element.removeClassName(this,'over')" class=" active  parent dropdown level0"> <a class="dropdown-toggle" href="#"  onclick="return false" class="active"><span>Sales</span></a>
                <ul class="nav">
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Orders</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Invoices</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Shipments</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Credit Memos</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Transactions</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Recurring Profiles (beta)</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Billing Agreements</span></a></li>
                    <li  class="level1"> <a class="dropdown-toggle" href="#" class=""><span>Terms and conditions</span></a></li>
                    <li onmouseover="Element.addClassName(this,'over')" onmouseout="Element.removeClassName(this,'over')" class="  parent dropdown last level1"> <a class="dropdown-toggle" href="#"  onclick="return false" class=""><span>Tax</span></a>
                        <ul class="nav"> <!--Need to add .dropdown-menu here-->
                            <li  class="level2"> <a class="dropdown-toggle" href="#" class=""><span>Manage Tax Rules</span></a></li>
                            <li  class="level2"> <a class="dropdown-toggle" href="#" class=""><span>Manage Tax Zones &amp; Rates</span></a></li>
                            <li  class="level2"> <a class="dropdown-toggle" href="#" class=""><span>Import / Export Tax Rates</span></a></li>
                            <li  class="level2"> <a class="dropdown-toggle" href="#" class=""><span>Customer Tax Classes</span></a></li>
                            <li  class="last level2"> <a class="dropdown-toggle" href="#" class=""><span>Product Tax Classes</span></a></li>
                        </ul>
                    </li>
                </ul>
            </li>
<!--THE PHP-->
            <?php 
            public function getMenuLevel($menu, $level = 0)
            {
                $html = '<ul class="nav" ' . (!$level ? 'id="nav"' : '') . '>' . PHP_EOL;
                foreach ($menu as $item) {
                    $html .= '<li ' . (!empty($item['children']) ? 'onmouseover="Element.addClassName(this,\'over\')" '
                        . 'onmouseout="Element.removeClassName(this,\'over\')"' : '') . ' class="'
                        . (!$level && !empty($item['active']) ? ' active' : '') . ' '
                        . (!empty($item['children']) ? ' parent dropdown' : '')
                        . (!empty($level) && !empty($item['last']) ? ' last' : '')
                        . ' level' . $level . '"> <a class="dropdown-toggle" href="' . $item['url'] . '" '
                        . (!empty($item['title']) ? 'title="' . $item['title'] . '"' : '') . ' '
                        . (!empty($item['click']) ? 'onclick="' . $item['click'] . '"' : '') . ' class="'
                        . ($level === 0 && !empty($item['active']) ? 'active' : '') . '"><span>'
                        . $this->escapeHtml($item['label']) . '</span></a>' . PHP_EOL;

                    if (!empty($item['children'])) {
                        $html .= $this->getMenuLevel($item['children'], $level + 1);
                    }
                    $html .= '</li>' . PHP_EOL;
                }
                $html .= '</ul>' . PHP_EOL;

                return $html;
            }
4

1 に答える 1

1

これらすべてのフィールドやその他の部分を配置するスペースがないため、うまくテストできませんが、再帰的に呼び出された関数があることがわかります。これにより、2 番目の 'id="nav"' が発生します。

public function getMenuLevel($menu, $level = 0)
{
/* declared id="nav" here */
    $html = '<ul class="nav" ' . (!$level ? 'id="nav"' : '') . '>' . PHP_EOL;
    foreach ($menu as $item) {
        $html .= '<li ' . (!empty($item['children']) ? 'onmouseover="Element.addClassName(this,\'over\')" '
            . 'onmouseout="Element.removeClassName(this,\'over\')"' : '') . ' class="'
            . (!$level && !empty($item['active']) ? ' active' : '') . ' '
            . (!empty($item['children']) ? ' parent dropdown' : '')
            . (!empty($level) && !empty($item['last']) ? ' last' : '')
            . ' level' . $level . '"> <a class="dropdown-toggle" href="' . $item['url'] . '" '
            . (!empty($item['title']) ? 'title="' . $item['title'] . '"' : '') . ' '
            . (!empty($item['click']) ? 'onclick="' . $item['click'] . '"' : '') . ' class="'
            . ($level === 0 && !empty($item['active']) ? 'active' : '') . '"><span>'
            . $this->escapeHtml($item['label']) . '</span></a>' . PHP_EOL;

        if (!empty($item['children'])) {
/* this line calls the function again which will cause id="nav" to happen again. */
           $html .= $this->getMenuLevel($item['children'], $level + 1);
        }
        $html .= '</li>' . PHP_EOL;
    }
    $html .= '</ul>' . PHP_EOL;

    return $html;
}

あなたの !$level が間違った答えを出している可能性があると思うので、それを修正するための 1 つの推測は、$level とは何かをよりよく確認することです。

public function getMenuLevel($menu, $level = 0)
{

    $idnav = '';
    if ($level === 0) 
        $idnav = 'id="nav"';

    $html = '<ul class="nav" ' . $idnav . '>' . PHP_EOL;
    foreach ($menu as $item) {
        $html .= '<li ' . (!empty($item['children']) ? 'onmouseover="Element.addClassName(this,\'over\')" '
.....

もう 1 つのアイデアは、ネストされたループです。多分以下のようなもの:

<?php
    public function getMenuLevel($menu, $level = 0)
    {
        $html = '<ul class="nav" ' . (!$level ? 'id="nav"' : '') . '>' . PHP_EOL;
 /*notice*/
        while (!empty($item['children'])) {
            foreach ($menu as $item) {
                $html .= '<li ' . (!empty($item['children']) ? 'onmouseover="Element.addClassName(this,\'over\')" '
                    . 'onmouseout="Element.removeClassName(this,\'over\')"' : '') . ' class="'
                    . (!$level && !empty($item['active']) ? ' active' : '') . ' '
                    . (!empty($item['children']) ? ' parent dropdown' : '')
                    . (!empty($level) && !empty($item['last']) ? ' last' : '')
                    . ' level' . $level . '"> <a class="dropdown-toggle" href="' . $item['url'] . '" '
                    . (!empty($item['title']) ? 'title="' . $item['title'] . '"' : '') . ' '
                    . (!empty($item['click']) ? 'onclick="' . $item['click'] . '"' : '') . ' class="'
                    . ($level === 0 && !empty($item['active']) ? 'active' : '') . '"><span>'
                    . $this->escapeHtml($item['label']) . '</span></a>' . PHP_EOL;

              }
  /* here is the tricky part */
              $html .= '</li>' . PHP_EOL;
              $html .= $this->getMenuLevel($item['children'], $level + 1);
        }
        $html .= '</ul>' . PHP_EOL;

        return $html;
    }
?>

トリッキーな部分の詳細を試行錯誤して、結果がリストを正しく終了するようにすることができます。

于 2013-04-21T02:36:25.607 に答える