【问题标题】:Data put into Dropdown数据放入下拉列表
【发布时间】:2017-04-23 23:57:14
【问题描述】:

我想从 MySQL 获取数据并将其插入到我的导航栏中。我的问题是一些数据必须放在下拉列表下,但它会创建一个新的主列表项。

这是现在的屏幕截图,但我希望在下拉菜单中插入 Panel 列。

    <?php 
     $query  =   $connect->prepare("SELECT * FROM `ucp_navbar` WHERE `Kategorie` = 0");
     $query->execute();
    ?>

<div class='collapse navbar-collapse' id='bs-example-navbar-collapse-1'>
<ul class='nav navbar-nav'>
    <?php while ($row = $query->fetch()) { echo $row["Panel"]; if($row["Panel"] == 0) { ?>
        <li <?php if($page_a == $row["Active"]) echo "class='active nav-active'"; ?>>
            <a href='<?php echo htmlentities($row["Link"]); ?>'><i class='fa fa-<?php echo htmlentities($row["Icon"]); ?>' aria-hidden='true'></i> <?php echo htmlentities($row["Name"]); ?></a>
        </li><?php } ?>

        <?php if($row["Panel"] != 0 && $row["Panel"] == 1) { ?>
        <li class='dropdown'>
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class='fa fa-user' aria-hidden='true'></i> Account<span class="caret"></span></a>
            <ul class="dropdown-menu">
                <li>
                    <a href='<?php echo htmlentities($row["Link"]); ?>'><i class='fa fa-<?php echo htmlentities($row["Icon"]); ?>' aria-hidden='true'></i> <?php echo htmlentities($row["Name"]); ?></a>
                </li>
            </ul>        
        </li>
    <?php } } ?>
</ul>

我的数据库结构:

【问题讨论】:

  • 也许我遗漏了一些东西,但你怎么知道它应该进入哪个下拉列表?如果 Panel == 1 那么它会在所有下拉列表中吗?根据第一张图片,您有两个名为 Account 的下拉菜单。数据库结构不指示哪些是下拉列表。大多数情况下,当你这样做时,你应该在那里有一个父子关系,而不是面板,这应该是这个链接显示在下面的“父”的 ID,如果它是 0,那么它不是一个下拉列表。

标签: php html css mysql


【解决方案1】:

我认为您遇到的问题是您将子菜单与主要导航栏项目相同。下面是一个可能的解决方案,我进行了一些重格式重构,尝试将逻辑部分置于顶部,以便解决方案更加清晰。我倾向于同意较早的评论者(@Scott)的观点,即创建表的父子关系将是长期更易于维护的做法。

<?php 
// Make query
$query = $connect->prepare("SELECT * FROM `ucp_navbar` WHERE `Kategorie` = 0");
$query->execute();

// Setup containers for list items
$nav = array();
$dropdown = array();

// Iterate query
while ($row = $query->fetch()) {
  // Assign built list item to either navbar or dropdown arrays
  switch ($row['Panel']) {
    case 0:
      $nav[] = buildListItem(
        htmlentities($row['Link']),
        htmlentities($row['Icon']),
        echo htmlentities($row["Name"]),
        true
      );
      break;
    case 1:
      $dropdown[] = buildListItem(
        htmlentities($row['Link']),
        htmlentities($row['Icon']),
        echo htmlentities($row["Name"])
      ); 
  }  
}

// Add dropdowns to main nav and convert array of nav items to string.
$nav[] = buildDropdown($dropdowns);
$navbar = implode("", $nav);

/**
 * Builds an individual list item.
 *
 * @param string $link URL to use for href
 * @param string $icon font-awesome icon to use
 * @param string $name display name for navbar
 * @param bool   $active adds nav-active class when true
 *
 * @return string formatted single list item
 */
function buildListItem($link, $icon, $name, $active = false)
{
  $class = ($active) ? ' class="active nav-active"': ""
  return "<li{$class}><a href=\"{$link}\"><i class=\"fa fa-{$icon}\" aria-hidden=\"true\"></i>{$name}</a></li>";
}

/**
 * Construct dropdown list item.
 *
 * @param array $dropdowns group of dropdown list items 
 *
 * @return string formatted dropdown list for navbar
 */
function buildDropdown($dropdowns)
{
  $list = implode("", $dropdowns);
  return <<<EOT 
  <li class='dropdown'>
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
        <i class='fa fa-user' aria-hidden='true'></i> 
        Account<span class="caret"></span>
      </a>
      <ul class="dropdown-menu">
          $list
      </ul>        
  </li>
EOT;
}
?>

<div class='collapse navbar-collapse' id='bs-example-navbar-collapse-1'>
<ul class='nav navbar-nav'>
   <?php echo $navbar; ?>
</ul>

【讨论】:

  • 谢谢老兄,我测试了它,它有效!非常感谢,现在我知道如何处理动态下拉列表了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2015-08-22
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多