如果使用mysqli查询存在子菜单,则向<li>添加一个类

时间:2015-12-09 12:53:33

标签: php

我想知道,如果它有一个sub_menu,我如何将一个类添加到<li>

我有一个从mysql数据库填充的正确HTML菜单。

<div class="collapse navbar-collapse">
    <ul class="nav navbar-nav navbar-right">
        <li><a href="/about-us/">About us</a>
            <ul class="dropdown-menu">
                <li><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
                <li><a href="#">Link 3</a></li>
                <li><a href="#">Link 4</a></li>
                <li><a href="#">Link 5</a></li>
            </ul>
        </li>

        <li class="dropdown"><a href="contact.php">Contact</a></li>

    </ul>
</div>

我正在使用bootstrap框架,因此对于下拉菜单,我必须将<li>替换为:

<li class='dropdown'>
    <a aria-expanded='false' aria-haspopup='true' class='dropdown-toggle' data-toggle='dropdown' href='/about-us/' role='button'>
        About us <span class='caret'></span>
    </a>
</li>

我想知道如何在循环中运行子菜单查询之前检查<li>是否有任何sub_menu?这样我就可以为下拉菜单添加标记。

以下是生成MENU的PHP代码:

<div class="collapse navbar-collapse">
    <ul class="nav navbar-nav navbar-right">
        <?php
                    $res1 = $connection->query("SELECT * FROM primary_nav ORDER BY m_menu_id ASC");
                    while($menu=$res1->fetch_array())
                    {
                    ?>
            <li>
                <a href="<?php echo $domain; ?><?php echo $menu['m_menu_link']; ?>">
                    <?php echo $menu['m_menu_name']; ?>
                </a>
                <?php
                    $res1_pro=$connection->query("SELECT * FROM primary_subnav WHERE m_menu_id=".$menu['m_menu_id']." ORDER BY seq ASC");
                    //echo "\xA";
                    ?>
                    <?php
                    if(mysqli_num_rows($res1_pro) > 0) {
                    echo '<ul class="dropdown-menu">' ."\xA";
                        while ($pro1_row = $res1_pro->fetch_array()) {
                    ?>
                        <li>
                            <a href="<?php echo $domain; ?><?php echo $pro1_row['s_menu_link']; ?>">
                                <?php echo $pro1_row['s_menu_name']; ?>
                            </a>
                        </li>
                        <?php
                        }
                    echo '</ul>' ."\xA";
                    }
                    ?>
            </li>
            <?php
                        echo "\xA";
                    }
                    ?>
    </ul>
</div>

我可以用jQuery做,但我想用HTML方式做。

1 个答案:

答案 0 :(得分:2)

您必须在<li>检查行中添加if类。然后你必须添加一个else子句来回显<li>而没有类:

<?php
$res1 = $connection->query("SELECT * FROM primary_nav ORDER BY m_menu_id ASC");
while($menu=$res1->fetch_array())
{

    $res1_pro=$connection->query("SELECT * FROM primary_subnav WHERE m_menu_id=".$menu['m_menu_id']." ORDER BY seq ASC");
    //echo "\xA";
    if(mysqli_num_rows($res1_pro) > 0) { // echo the list element with the class here
?>
        <li class="foo">
            <a href="<?php echo $domain; ?><?php echo $menu['m_menu_link']; ?>"><?php echo $menu['m_menu_name']; ?></a>
<?php
    echo '<ul class="dropdown-menu">' ."\xA";
    while ($pro1_row = $res1_pro->fetch_array()) {
?>
        <li>
            <a href="<?php echo $domain; ?><?php echo $pro1_row['s_menu_link']; ?>"><?php echo $pro1_row['s_menu_name']; ?></a>
        </li>
<?php
    }
    echo '</ul>' ."\xA";
    } else { // echo the normal list element if number of rows is 0 
?>
    <li>
    <a href="<?php echo $domain; ?><?php echo $menu['m_menu_link']; ?>"><?php echo $menu['m_menu_name']; ?></a>
<?php    
    }
?>
</li>
<?php
 echo "\xA";
}
?>

注意 :这种特殊的编码风格使得在需要时编写和维护代码非常困难。您可能希望研究将PHP和HTML结合起来的方法,以便更新和维护代码。