gpt4 book ai didi

PHP/MySQL 导航菜单

转载 作者:行者123 更新时间:2023-11-29 14:51:34 25 4
gpt4 key购买 nike

我正在尝试为分层导航菜单栏创建一个函数。

我希望能够拥有这样的东西......

<ul id="navigation">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
<ul>
<li><a href="#">Sub Menu Item 1</a></li>
<li><a href="#">Sub Menu Item 1</a></li>
</ul>
<li><a href="#">Menu Item 3</a></li>
<li><a href="#">Menu Item 4</a></li>
</ul>

我正在使用此功能,但它没有像我希望的那样正常工作。它显示了主要的父链接,但不显示子链接。

function build_navbar($pid,$sub=0)
{
global $db;

$query = $db->simple_select("navbar", "*", "pid='".$pid."'", array("order_by" => "disporder"));
$menu_build = "<ul id=\"navigation\">\n";
while($menu = $db->fetch_array($query))
{
if($sub == 1)
{
$menu_build .= "<ul>\n";
$menu_build .= "<li><a href=\"#\">".$menu['title']."</a></li>\n";
$menu_build .= "</ul>\n";
}
else
{
$menu_build .= "<li><a href=\"#\">".$menu['title']."</a></li>\n";
}
build_navbar($menu['id'],1);
}
$menu_build .= "</ul>\n";

return $menu_build;
}

也许有人可以帮我解决这个问题?谢谢。

--- 新更新 ---

Andy Groff,这就是您的代码输出的内容:

<ul id="navigation">
<li><a href="#">Home</a></li>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child 2</a></li>
</ul>
<li><a href="#">Parent</a></li>
</ul>

但是,我需要对其进行修改,使其输出如下:

<ul id="navigation">
<li><a href="#">Home</a>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child 2</a></li>
</ul>
</li>
<li><a href="#">Parent</a></li>
</ul>

这就是它现在输出的内容,Andy:

<ul id="navigation">
</li>
<li><a href="#">Home</a>
</li>
<ul>
<li>
<a href="#">Child Link</a>
</li>
<li><a href="#">Child 2</a>
</ul>
</li>
<li><a href="#">Parent</a>
</ul>

最佳答案

我认为你的问题可能与你的函数是递归的这一事实有关,但是你正在构建的字符串每次都会在函数的顶部重置,而不是再次传递到函数中。另外,我没有看到 sub 会在最终迭代中设置回零的任何地方。此外,您似乎不需要查询每一行。查询一次并构建整个菜单会更有效。我认为可以放弃递归。另外,我建议在数据中存储一个“sub”标志,而不是使用一些难以理解的 php 逻辑来判断给定的行是否是子菜单。我根据这些概念进行了修改,但不知道它是否有效,因为我没有/不想创建数据来测试它:

function build_navbar()
{
global $db;
//first things first, i'd recommend putting a "sub" flag in your database. This example will use it.

//start off by getting all of the rows. No need for recursion.
$query = $db->simple_select("navbar", "*", "1", array("order_by" => "disporder"));
$menu_build = "<ul id=\"navigation\">\n";

//keep track of what level we're at
$level = 1;

while($menu = $db->fetch_array($query))
{
//get sub from data
$sub = $menu['sub']

//we need to go back to root level
if($sub == 0 && $level == 2){
$level--;
$menu_build .= "</ul></li>\n";
}
else $menu_build .= "</li>\n";

//we need to go up one level
if($sub == 1 && $level == 1)
{
$level++;
$menu_build .= "<ul><li>\n";
}
else $menu_build .= "<li>";
//always print out a link
$menu_build .= "<a href=\"#\">".$menu['title']."</a>\n";
}
$menu_build .= "</ul>\n";

return $menu_build;
}

关于PHP/MySQL 导航菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628722/

25 4 0