【问题标题】:Bootstrap dropdown with php and databases带有 php 和数据库的 Bootstrap 下拉菜单
【发布时间】:2017-10-24 10:34:34
【问题描述】:

我在使用 twitter bootstrap 时遇到了下拉菜单的问题。在我的数据库中,我有一个名为类别的表。其中我有 8 条记录:

ID | Category | parent
1  | Apple    | 0
2  | Samsung  | 0
3  | Huawei   | 0
4  | Others   | 0
5  | Sony     | 4
6  | LG       | 4
7  | Lenovo   | 4
8  | Nokia    | 4

通过使用这些数据,我创建了一个导航栏。但是我有这个问题:由于“其他人”有父母,他们出现在他们的父母下拉列表中。苹果、三星和华为没有任何孩子,所以我希望他们根本没有下拉菜单。但是,我的代码会为这些类别生成一个空下拉列表。

<body>
<?php
    $sql = "SELECT * FROM categories WHERE parent = 0";
    $pquery = $db->query($sql);
  ?>
  <nav class="navbar navbar-default navbar-fixed-top" id="navbar">
    <div class="container">
      <a href="/e-shop/index.php" class="navbar-brand" id="logo">Mobile e-shop</a>
      <ul class="nav navbar-nav">
        <?php while($parent = mysqli_fetch_assoc($pquery)) : ?>
        <?php
          $parent_id = $parent['id'];
          $sql2 = "SELECT * FROM categories WHERE parent = '$parent_id' ";
          $cquery = $db->query($sql2);
        ?>

<!-- Drop down meniu -->
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="text"><?php echo $parent['kategorija']; ?><span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            <?php while($child = mysqli_fetch_assoc($cquery)) : ?>
            <li>
            /*I assume i should do if statement or something here to check is its null? I tryied to use is_null() but it did not work for me*/
              <a href="<?=$child['adresas']; ?>">
                <?php echo $child['kategorija'] ?>
              </a>
            </li>
          <?php endwhile; ?>
          </ul>
        </li>
      <?php endwhile; ?>
      </ul>
    </div>
  </nav>

我认为我应该执行 if 语句或要检查的内容是否为空?我尝试使用 is_null() 但它对我不起作用。

【问题讨论】:

  • 我不确定,但您想要这样:Apple、Samsung 和 Huawei 没有下拉菜单,而其他您希望在下拉菜单中显示。

标签: javascript php css twitter-bootstrap


【解决方案1】:

我看到了你的问题。您将获得所有没有父级的项目并赋予它们相同的功能,这意味着它们都被分配了一个父类。

基本上,您需要找到有孩子的父母,然后为他们分配正确的班级。像这样:

<?php
  // Check if the child-query result is larger than 0
  if(mysqli_num_rows($cquery) > 0) {
    // Run your code for 'parents' here.
    <li class="dropdown">
    </li>
  } else {
    // Run your code for 'noparents' here.
    <li class="nodropdown">
    </li>
  }
?>

如果我是你,我也会用干净的 PHP 代码编写语句,所以你只需要在 HTML 中调用一些变量。这使您的代码更具可读性。在下面的示例中,您将数据库调用和转换代码都放在一个地方。如果你改变一个,你可能不得不改变另一个,所以这是有道理的。此外,如果其他人查看您的代码,他们会更快地理解它。

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="text">
        <?php echo $parent['kategorija']; ?><span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        <?php echo get_dropdown_children(); ?>
    </ul>
<li>

<?php
function get_dropdown_children($parent['id']) {
    $sql2 = "SELECT * FROM categories WHERE parent = '$parent_id' ";
    $cquery = $db->query($sql2);
    $result = "";

    while($child = mysqli_fetch_assoc($cquery)) {
        $result .= "<li><a href='" . $child['adresas'] . "'>";  // Opening tags
        $result .= $child['kategorija'];                        // Content
        $result .= "</a></li>";                                 // Closing tags
    }

    return $result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2012-03-09
    • 2011-12-27
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多