php - 制作动态下拉导航系统

标签 php html mysql

我想在我的网站上创建一个下拉菜单,但我遇到了困难,想不出该怎么做。

基本上我需要检查数据库中的 2-3 个变量并输出正确的数据。

我目前正在检查它是否是外部链接,以及它是否包含子菜单,但我无法让它输出正确的信息。

基本上我希望它检查它是外部链接还是非外部链接,以及它是否有子菜单,如果它有子菜单,则显示其下方的菜单选项。所以说我有菜单 1、2、3、4 和 2,4 有一个子菜单,我需要它们列出它们下面的其他链接。我在我的数据库中放入了 toplink_id(代表这个项目应该在哪个链接下)sc_order(它将控制子链接显示的顺序)还有 dropdown(它告诉我菜单是否有子菜单。)

这是我的代码的开始

$sql = "SELECT label, url, ext, dropdown FROM content_pages WHERE top_nav='1' AND active='1' ORDER by page_order ASC"; 
$query = mysqli_query($dbc, $sql) or die (mysqli_error($dbc));

$menuDisplay .= '<div class="bg-2"><div class="container_12"><article class="grid_12"><nav><ul class="menu sf-js-enabled">';

while ($row = mysqli_fetch_array($query)) { 

$url = $row["url"];
$nav_label = $row["label"];
$drop_down ='<ul><li><a href="../pages/' . $url . '">' . $nav_label . '</a></li></ul>'; 


if ($row["ext"] == 0 && $row["dropdown"] == 1){

$menuDisplay .= '<li><a href="../pages/' . $url . '">' . $nav_label . '</a>'  . $drop_down . '</li>';
}

elseif ($row["ext"] == 1 && $row["dropdown"] == 1){

$menuDisplay .= '<li><a href="../' . $url . '">' . $nav_label . '</a>'  . $drop_down . '</li>';
 }
 elseif ($row["ext"] == 0){

$menuDisplay .= '<li><a href="../pages/' . $url . '">' . $nav_label . '</a></li>';
}

elseif ($row["ext"] == 1)
{
    $menuDisplay .= '<li><a href="../' . $url . '">' . $nav_label . '</a></li>';
}



} 
$menuDisplay .= '</ul></nav></article></div></div></header>';   
mysqli_free_result($query);

最佳答案

我发现不使用 jQuery 的最佳方法是使用多维数组。

    // Create a multidimensional array to conatin a list of items and parents
$menu = array(
    'items' => array(),
    'parents' => array(),
);
// Builds the array lists with data from the menu table


while ($items = mysqli_fetch_assoc($query))
{

    // Creates entry into items array with current menu item id ie. $menu['items'][1]
    $menu['items'][$items['id']] = $items;
    // Creates entry into parents array. Parents array contains a list of all items with children
    $menu['parents'][$items['parent']][] = $items['id'];
}

// Menu builder function, parentId 0 is the root

function buildMenu($parent, $menu)
{

    $html = "\n";
   if  ( isset($menu['parents'][$parent]) )
   {

      $html .= "";

       foreach ($menu['parents'][$parent] as $itemId)

       {
    if(!isset($menu['parents'][$itemId]) && $menu['items'][$itemId]['ext'] == 0)
    {
         $html .= "<li>\n  <a href='../pages/".$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."</a>\n</li> \n";
    }
    else
                if(!isset($menu['parents'][$itemId]) && $menu['items'][$itemId]['ext'] == 1)
    {
         $html .= "<li>\n  <a href='../".$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."</a>\n</li> \n";
    }


if(isset($menu['parents'][$itemId]))
          {

             $html .= "<li>\n  <a href='../pages/".$menu['items'][$itemId]['link']."'>".$menu['items'][$itemId]['label']."<span class='arrow-down'></span></a> \n";
        $html .= "<ul style='border-radius: 0px 0px 6px 6px'> \n";
             $html .= buildMenu($itemId, $menu);
        $html .= "</ul> \n";
             $html .= "</li> \n";

          }   

    }
    $html .= "\n";
   }
   $html .= "";
return $html;

}

关于php - 制作动态下拉导航系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632575/

相关文章:

html - 为什么带有文本的 block 会移到底部?

mysql - mysqldump无法访问c盘

MySQL 对多个 JOINS 使用 GROUP_CONCAT

php - codeigniter 事件记录 : Fields lost when performing a JOIN

php - 如何逐字浏览字符串文本并替换它

javascript - 如何使用键盘控件创建切换按钮?

html - CSS 响应 1080p 及以上

javascript - 关于 Node.js 中的异步执行流程

php - 在不破坏设计/样式的情况下在 PHPSpreadsheet 中从 excel 转换为 pdf

javascript - 数据表格表单提交所有记录