制作动态下拉导航系统

时间:2014-05-13 13:26:32

标签: php html mysql

我正在尝试在我的网站上创建一个下拉菜单,我碰到了一堵砖墙,无法思考如何做到这一点。

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

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

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

这是我的代码的开头

$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);

1 个答案:

答案 0 :(得分:0)

我发现不使用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;

}