[英]Help with PHP recursive navigation list menu
我正在嘗試將動態遞歸導航列表菜單添加到正在工作的站點。 場景是菜單有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標簽。 在過去的兩天里,我一直都在努力。 任何幫助將不勝感激,謝謝...
在嵌套列表中,子列表將始終包含在 list元素中-這就是使它們嵌套的原因。 您可以使用此格式僅使用一個函數打印完整列表(使用通用代碼,但您應該了解基本思想):
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>
盡管此問題與我兩天前發布的問題並不完全相同,但這是我嘗試使用文件夾而不是數據庫的結果。 下面的代碼將遍歷指定$ path的目錄和所有子目錄,並在運行腳本完成后將結果顯示在嵌套的無序列表中。 希望能幫助到你。
<?php
function readDirs($path){
$dirHandle = opendir($path);
echo "<ul>";
while ($item = readdir($dirHandle)) {
$newPath = $path . "/" . $item;
if (is_dir($newPath) && $item != '.' && $item != '..') {
echo "<li><a href='$newPath'>$item</a>";
readDirs($newPath);
}
}
echo "</li></ul>";
}
$path = "./galleries";
readDirs($path);
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.