我需要创建一个“nth”子类别的树形菜单。我决定使用我的表结构的邻接表模型,因为我不会更新这个表,这似乎是最容易实现我的使用。从存储在表中的数据创建无序列表树菜单与邻接列表模型... php
我要使用样式“UL”和“礼”的标签输出......我已经有一个CSS和jQuery的解决方案做造型。我的问题来自于将数据从数据库中提取出来,并使用PHP的递归函数来构建列表......列表是一个连接的字符串,它被解析为构建树。我真的很难让关闭的“ul”和“li”标签排列在他们需要的位置。
这是最好的方法吗?有没有其他更好的方式使用数组或类似的东西来做到这一点?任何你可以指向我的“最佳实践”的例子来构建这样的列表将不胜感激。谢谢。
这里是我的表结构:
portfolio_id(INT),p_name(VARCHAR),parent_portfolio_id(INT) 这就是我想要的数据看起来像呈现在:
<ul>
<li>Portfolio Name
<ul>
<li>Sub portfolio A
<ul>
<li>Sub portfolio A - 1</li>
<li>Sub portfolio A - 2</li>
<li>Sub portfolio A - 3</li>
</ul>
</li>
<li>Sub portfolio B</li>
<li>Sub portfolio C</li>
</ul>
</li>
</ul>
这里的电流递归函数:
function portf($ndb, $portfolio_id, $space=1, $x="", $level=1) // cat id, space to add "_" degree of categoreis times, list of categories
{
$sql = "SELECT portfolio_id, p_name, parent_portfolio_id FROM portfolio WHERE parent_portfolio_id = $portfolio_id ORDER BY p_name ASC;";
$select = $ndb->get_results($sql, 0, ARRAY_A);
if(!is_null($select))
{
foreach($select as $data)
{
$x = $x . $data->portfolio_id . '_' . $data->parent_portfolio_id . '_' . $level . str_repeat('_', $space) . $data->p_name . '-';
$x = $this->portf($ndb, $data->portfolio_id, ($space+1), $x, ($level+1));
}
return $x;
}
else
{
return $x;
}
}
这将帮助,如果你表现出一定的代码... – GrumpyCanuck 2010-03-25 01:16:02
添加了一些示例代码...感谢名单 – Ronedog 2010-03-25 04:05:37