2009-12-02 50 views
1

我想創建一個「導覽欄」(我不知道它的正確名稱)。我有一個名爲cat表具有以下數據:在php + mysql的網頁上面創建這樣的「指南欄」?

 
catid  catname   parentid 
1   news   null 
2   sport   1 
3   health   1 
4   tennis   2 
5   football  2 
6   soccer   5 

我的頁面接收:$catid=6,我想創建:

news>sport>football>soccer
+1

它的名字是'breadcrumbs' – Jakub 2009-12-02 15:22:54

回答

3

首先從數據庫中獲取數據,並建立一個數組

$q = mysql_query("SELECT catid, catname, parentid FROM cat"); 
$pages = array(); 
while($r = mysql_fetch_assoc($q)) { 
    $pages[$r['catid']] = array('catname' => $r['catname'], 'parentid' => $r['parentid']); 
} 

使用遞歸函數來構建麪包屑:

function build_breadcrumbs($pages, $catid) { 
    if(is_null($catid) || empty($catid)) return; 
    return build_breadcrumbs($pages, $pages[$catid]['parentid']).$pages[$catid]['catname'].' > '; 
} 

該函數返回父母的麪包屑+當前的麪包屑。使用功能是這樣的:

$catid = 6; 
$breadcrumbs = trim(build_breadcrumbs($pages, $catid), ' >'); 
echo $breadcrumbs; 

或者,如果你喜歡陣列的更多,你可以創建這樣的函數:

function build_breadcrumbs($pages, $catid) { 
    if(is_null($catid) || empty($catid)) return array(); 
    return array_merge(build_breadcrumbs($pages, $pages[$catid]['parent']), array($pages[$catid]['name'])); 
} 

與破滅使用它:

$catid = 6; 
$breadcrumbs = implode(' > ', build_breadcrumbs($pages, $catid)); 
echo $breadcrumbs; 

那爲您提供了在函數外定義分隔符的選項。希望有所幫助。

+0

Tatu Ulmanen;非常感謝我使用了最後一條建議,它工作得很好,我有可能指導我如何給每個貓名添加一個鏈接?所以當用戶點擊例如足球去足球網頁。 – Kaveh 2009-12-03 01:53:15

+0

在build_breadcrumbs函數中,用''.$pages[$catid]['name'].''替換'$ pages [$ catid] ['name']'。 – 2009-12-03 07:17:49

1

他們被稱爲麪包屑。這裏有一個教程,可以幫助:http://www.mindpalette.com/tutorials/breadcrumbs/index.php

+0

感謝您的指導,但您建議我認爲在頁面層次結構上的工作鏈接,假設我只有一個頁面的運動,但運動有3個層次,所以我如何顯示同一頁面的3個級別? – Kaveh 2009-12-03 02:12:35