gpt4 book ai didi

php - 帮助 PHP 递归导航列表菜单

转载 作者:可可西里 更新时间:2023-11-01 00:04:13 26 4
gpt4 key购买 nike

我正在尝试将动态递归导航列表菜单添加到我正在处理的站点。场景是菜单有 2 个级别,由 parentid(preid) 关联。

我的问题是我可以正确显示第一级列表,但是我无法正确显示第二级列表。我不确定在哪里添加第二级的 UL 和/UL 标签。

这就是我想要的

<ul>
<li>Item 1</li>
<li>item 2</li>
<li>item 3</li>
<ul>
<li>sub item 1</li>
<li>sub item 2</li>
</ul>
<li>Item 4</li>
<li>item 5</li>
<ul>
<li>sub item 1</li>
<li>sub item 2</li>
</ul>
<li>item 6</li>
</ul>

这实际上是我用下面的代码得到的:

    <ul>
<li>item 1
<ul>
</ul>
</li>
<li>item 2
<ul>
<li>sub item 1</li>
<ul>
</ul>
<li>sub item 2</li>
<ul>
</ul>
</ul>
</li>
<li>Sports Injuries
<ul>
</ul>
</li>
</ul>
</li>
</ul>

下面是我用来创建菜单的类文件:

class Dynamic_Menu 
{
function getConfig()
{
$this->DB_SERVER = 'localhost';
$this->DB_USER = '***';
$this->DB_PASS = '***';
$this->DB_NAME = '***';

}

function __construct()
{
$this->getConfig();
$Conn = mysql_connect($this->DB_SERVER, $this->DB_USER, $this->DB_PASS);
if (!$Conn)
die("Error: ".mysql_errno($Conn).":- ".mysql_error($Conn));
$DB_select = mysql_select_db($this->DB_NAME, $Conn);
if (!$DB_select)
die("Error: ".mysql_errno($Conn).":- ".mysql_error($Conn));
}

function select_row($sql)
{
//echo $sql . "<br />";
if ($sql!="")
{
$result = mysql_query($sql) or die("Error: ".mysql_errno().":- ".mysql_error());
if ($result)
{
while($row = mysql_fetch_array($result))
$data[] = $row;
}
return $data;
}
}

function recordCount($sql)
{
if ($sql!="")
{
$result = mysql_query($sql) or die("Error: ".mysql_errno().":- ".mysql_error());
if ($result)
{
$cnt = mysql_num_rows($result);
return $cnt;
}
}
}

function getChild($id)
{
$menu = "";
$str = "";
$s = "SELECT * FROM vcms_sys_explorer WHERE preid = '$id' ";
$res = $this->select_row($s);
$menu .= '<ul>';
for ($i=0;$i<count($res);$i++)
{
$cnt_of_child = $this->recordCount("SELECT * FROM vcms_sys_explorer where preid = '".$res[$i][eid]."' ");
//if ($cnt_of_child > 0)
// $str = '';
//else
// $str = " (is sub menu item)";

$menu .= '<li>'. $res[$i][name].$str.'</li>';
$menu .= $this->getChild($res[$i][eid]);
}
$menu .= '</ul>';
return $menu;
}

function getMenu($parentid)
{
$menu = "";
$s = "SELECT * FROM vcms_sys_explorer WHERE preid = '$parentid' ";
$res = $this->select_row($s);

$menu .= '<ul>';

for ($i=0;$i<count($res);$i++)
{
$menu .= '<li>'.$res[$i][name].$this->getChild($res[$i][eid]).'</li>';
if ((count($res) - 1) > $i) {
}
}

$menu .= '</ul>';

return $menu;
}
}

我调用菜单:

$menu = new Dynamic_Menu();
$menu->getMenu(1);

有人可以帮助并解释我需要在哪里放置 2 级 UL 和/UL 标签。在过去的两天里,我一直在为此苦思冥想。任何帮助将不胜感激,谢谢...

最佳答案

在嵌套列表中,子列表将始终包含在列表元素——这就是它们嵌套的原因。您可以使用这种格式在一个函数中打印完整列表(在通用代码中,但您应该了解基本概念):

function get_list($parent) {
$children = query('SELECT * FROM table WHERE parent_id = '.$parent);
$items = array();
while($row = fetch_assoc($children)) {
$items[] = '<li>'.$row['name'].get_list($row['id']).'</li>';
}
if(count($items)) {
return '<ul>'.implode('', $items).'</ul>';
} else {
return '';
}
}

这将为您提供一个结构正确的列表:

<ul>
<li>Item 1</li>
<li>Item 2
<ul>
<li>Item 2.1</li>
<li>Item 2.2</li>
</ul>
</li>
</ul>

关于php - 帮助 PHP 递归导航列表菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909868/

26 4 0