2011-01-05 40 views
0

我從管理端創建CMC頁面。我在前端有一個3級菜單。我的CMS頁面的數據庫表結構的字段爲name,parent_id,description, statusphp中的菜單顯示

現在我必須在菜單中顯示子頁面的所有頁面,子頁面和子頁面。如何編寫這個查詢?

<!-- BEGIN Menu --> 
    <ul id="nav"> 
<li><a href="consumers.php">Consumers</a> 
    <ul><li><a href="personal_finance.php">Personal Finance </a> 
<ul><li><a href="personal_financial_makeover.php">Personal Financial Makeover</a></li> 
     <li><a href="personal_finance_consultancy.php">Personal Finance Consultancy</a></li> 
     </ul> 
    </li> 
    <li><a href="investings.php">Investings</a> 
     <ul> 
    <li><a href="securities_analysis.php">Securities Analysis</a></li> 
     <li><a href="portfolio_investment.php">Bernie Madoff Shield (Portfolio and Investment Analysis)</a></li> 
    </ul> 
    </li> 
    </ul> 
      </li> 
     <li><a href="entrepreneurs.php">Entrepreneurs</a> 
      <ul> 
    <li><a href="market_analysis.php">Market Analysis and Competitive Report </a></li> 
       <li><a href="business_plans_feasibility.php">Business Plans &amp; Feasibility Studies </a> 
      <ul> 
      <li><a href="business_plans.php">Business Plans</a> 
        <ul> 
         <li><a href="level1.php">Level 1</a></li> 
         <li><a href="level2.php">Level 2</a></li> 
         <li><a href="level3.php">Level 3</a></li> 
        </ul> 

        </li> 
     </ul> 

     </li> 
        </ul> 

    <!-- END Menu --> 

像你說的我試過了。我有主頁。它沒有孩子。它仍然是空的下拉菜單。然後正確顯示一級菜單。並且還顯示第二級菜單。實際上鼠標懸停在firstlevel菜單下拉菜單上。我正在下拉。直到現在好。但公開顯示菜單名稱。請看我的附件。我附上了2張圖片。在第一張圖像直接顯示像這樣。在鼠標懸停在第一級顯示下拉第二圖像。 alt textalt text

<? 

$query = "SELECT 
    t1.auto_id AS l1_id, t1.name AS l1_name 
    ,t2.auto_id AS l2_id, t2.name AS l2_name 
    ,t3.auto_id AS l3_id, t3.name AS l3_name 
FROM static_pages AS t1 
LEFT JOIN static_pages AS t2 ON t2.parent_id = t1.auto_id 
LEFT JOIN static_pages AS t3 ON t3.parent_id = t2.auto_id"; 

$result = mysql_query($query); 

$results = array() ; 
while($row=mysql_fetch_assoc($result)){ 
    $results[] = $row; 
} 

// Building the menu. Quick and dirty. 
$menu = array() ; 
foreach($results as $result) { 
    $menu_level_3 = array('auto_id' => $result['l3_id'], 'name' => $result['l3_name'], 'children' => array()) ; 
    $menu_level_2 = array('auto_id' => $result['l2_id'], 'name' => $result['l2_name'], 'children' => array($menu_level_3['auto_id'] => $menu_level_3)) ; 
    $menu_level_1 = array('auto_id' => $result['l1_id'], 'name' => $result['l1_name'], 'children' => array($menu_level_2['auto_id'] => $menu_level_2)) ; 

    if(!isset($menu[$menu_level_1['auto_id']])) { 
     $menu[$menu_level_1['auto_id']] = $menu_level_1 ; 
    } elseif(!isset($menu[$menu_level_1['auto_id']]['children'][$menu_level_2['auto_id']])) { 
     $menu[$menu_level_1['auto_id']]['children'][$menu_level_2['auto_id']] = $menu_level_2 ; 
    } else { 
     $menu[$menu_level_1['auto_id']]['children'][$menu_level_2['auto_id']]['children'][$menu_level_3['auto_id']] = $menu_level_3; 
    } 
} 
?> 
<ul id="nav"> 
<? foreach($menu as $item0) : ?> 
    <li> 
    <a href="?page=<?=$item0['auto_id']?>"><?=$item0['name']?></a> 
    <? if(!empty($item0['children'])){?> 
    <ul> 
    <? foreach($item0['children'] as $item1) : ?> 
     <li> 
     <a href="?page=<?=$item1['auto_id']?>"><?=$item1['name']?></a> 
     <? if(!empty($item1['children'])){?> 
     <ul> 
     <? foreach($item1['children'] as $item2) : ?> 
      <li><a href="?page=<?=$item2['auto_id']?>"><?=$item2['name']?></a></li> 
     <? endforeach; ?> 
     </ul> 
     <? }?> 
     </li> 
    <? endforeach; ?> 
    </ul> 
    <? }?> 
    </li> 
<? endforeach;exit;?> 
</ul> 
+0

請停止添加答案的附加信息對您的問題。改爲使用「編輯」鏈接。 – 2011-08-05 18:41:30

回答

2

我建議你閱讀Managing Hierarchical Data in MySQL

的查詢是:

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3 
FROM pages AS t1 
LEFT JOIN pages AS t2 ON t2.parent = t1.pages_id 
LEFT JOIN pages AS t3 ON t3.parent = t2.pages_id; 

UPDATE

$query = ' 
SELECT 
    t1.pages_id AS l1_id, t1.name AS l1_name 
    ,t2.pages_id AS l2_id, t2.name AS l2_name 
    ,t3.pages_id AS l3_id, t3.name AS l3_name 
FROM pages AS t1 
LEFT JOIN pages AS t2 ON t2.parent = t1.pages_id 
LEFT JOIN pages AS t3 ON t3.parent = t2.pages_id 
'; 

$result = mysql_query($query); 

$results = array() ; 
while($row=mysql_fetch_assoc($result)){ 
    $results[] = $row; 
} 

// Building the menu. Quick and dirty. 
$menu = array() ; 
foreach($results as $result) { 
    $menu_level_3 = array('id' => $result['l3_id'], 'name' => $result['l3_name'], 'children' => array()) ; 
    $menu_level_2 = array('id' => $result['l2_id'], 'name' => $result['l2_name'], 'children' => array($menu_level_3['id'] => $menu_level_3)) ; 
    $menu_level_1 = array('id' => $result['l1_id'], 'name' => $result['l1_name'], 'children' => array($menu_level_2['id'] => $menu_level_2)) ; 

    if(!isset($menu[$menu_level_1['id']])) { 
     $menu[$menu_level_1['id']] = $menu_level_1 ; 
    } elseif(!isset($menu[$menu_level_1['id']]['children'][$menu_level_2['id']])) { 
     $menu[$menu_level_1['id']]['children'][$menu_level_2['id']] = $menu_level_2 ; 
    } else { 
     $menu[$menu_level_1['id']]['children'][$menu_level_2['id']]['children'][$menu_level_3['id']] = $menu_level_3; 
    } 
} 
?> 
<ul> 
<? foreach($menu as $item0) : ?> 
    <li> 
    <a href="?page=<?=$item0['id']?>"><?=$item0['name']?></a> 
    <ul> 
    <? foreach($item0['children'] as $item1) : ?> 
     <li> 
     <a href="?page=<?=$item1['id']?>"><?=$item1['name']?></a> 
     <ul> 
     <? foreach($item1['children'] as $item2) : ?> 
      <li><a href="?page=<?=$item2['id']?>"><?=$item2['name']?></a></li> 
     <? endforeach; ?> 
     </ul> 
     </li> 
    <? endforeach; ?> 
    </ul> 
    </li> 
<? endforeach; ?> 
+0

感謝您的回覆。當然我會嘗試這一個。 – 2011-01-05 13:18:31

+0

非常感謝。我得到了錯誤。謝謝你的幫助 – 2011-01-06 09:28:08