我需要創建一個「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