2012-10-12 27 views
2

我已經經歷了幾十個和幾十個類似的問題,但實際上並沒有解決我的具體需求。使用php和mysql生成嵌套菜單的鏈接

我有一個由三個變量(ID,姓名,PID)

嵌套的菜單與下面的函數生成定義的MySQL表:

function get_categories($parent = '0') { 
    $html = '<ul id="menu">'; 
    $query = mysql_query("SELECT * FROM `categories` WHERE `pid` = '$parent'"); 
    while($row = mysql_fetch_assoc($query)) { 
     $current_id = $row['id']; 
     $html .= '<li><a href="">' . $row['name'] . '</a>'; 
     $has_sub = NULL; 
     $has_sub = mysql_num_rows(mysql_query("SELECT COUNT(`pid`) FROM `categories` WHERE `pid` = '$current_id'")); 
     if($has_sub) { 
      $html .= get_categories($current_id); 
     } 
     $html .= '</li>'; 
    } 
    $html .= '</ul>'; 
    return $html; 
} 
print get_categories(); 

我的問題是我怎麼可能產生該鏈接以便以「漂亮的網址」方式呈現。 ex。 <a href="/parent_category/sub_category/sub_sub_category">? 任何幫助將非常感激。

+0

更好的是從數據庫中的子項到父項的category_path – GBD

+0

我知道,但想知道是否有方法從父/子關係(從現有的表)生成該路徑。 – elrayyes

回答

1

這是我目前的遞歸菜單功能,我遇到同樣的問題。你有沒有最終找到解決方案?

我的數據庫表下面的方式構造:

ID | pid |標題| url
--------------------------------
1 | 0 |主頁|家
2 | 0 |父| |父
3 | 2 | Sub Parent |子父
4 | 3 | Sub Parent Child |要顯示子親子

我想「子親子」的鏈接網址爲:/父/子的父/子親子/

function buildMenu(){ 

// get all menuitems with 1 query 
$result = mysql_query("SELECT id, pid, url, title FROM links ORDER BY pid, title") 
or die(mysql_error()); 

// prepare special array with parent-child relations 
$menuData = array( 
    'items' => array(), 
    'parents' => array() 
); 

while ($menuItem = mysql_fetch_array($result)) 
{ 
    $menuData['items'][$menuItem['id']] = array(
     'id' => $menuItem['id'], 
     'pid' => $menuItem['pid'], 
     'url' => $menuItem['url'], 
     'title' => $menuItem['title'] 
    ); 

    $menuData['parents'][$menuItem['pid']][] = $menuItem['id']; 
} 

// menu builder function, parentId 0 is the root 
function buildList($parentId, $parentUrl, $menuData) 
{ 
    $html = ''; 

    if (isset($menuData['parents'][$parentId])) 
    { 
     $html = '<ul>'; 
     foreach ($menuData['parents'][$parentId] as $itemId) 
     { 
      $parent_url = $parentUrl."/".$menuData['items'][$itemId]['url']; 

      $html .= '<li><a href="'. $parent_url .'">' . $menuData['items'][$itemId]['title'] . '</a>'; 

      // find childitems recursively 
      $html .= buildList($itemId, $parent_url, $menuData); 

      $html .= '</li>'; 
     } 
     $html .= '</ul>'; 
    } 

    return $html; 
} 

// output the menu 
echo buildList(0, "", $menuData); 
} 

編輯
我已經回答了我自己的問題,我不知道這是否可以幫助您,但這是我的新功能。

+1

您的示例考慮到您在數據庫中設置了URL,這不完全是我正在查找的內容。我想根據突出顯示的分類/子分類構建鏈接。 (即,如果我突出顯示的項目是子子類別,則鏈接將反映http://mysite.com/category/sub-category/sub-sub-category)。 – elrayyes