我正在尝试在我的网站上创建一个下拉菜单,我碰到了一堵砖墙,无法思考如何做到这一点。
基本上我需要检查数据库中的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);
答案 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;
}