花了几个小时,需要一些专家帮助。
我有一张这样的表:
[id] [name] [parent_id]
1 fruits 0
2 orange 1
3 lemon 2
4 steak 0
当我去柠檬时,我希望面包屑像:
主页>水果>橙色>柠檬
柠檬不是链接,而是其余的链接。
有什么建议吗?
我找到的最好的是这个,但它将一切都变成了一个链接。
function createPath($id, $category_tbl) {
$s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
$r = mysql_query($s);
$row = mysql_fetch_array($r);
if($row['parent_id'] == 0) {
$name = $row['name'];
return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
} else {
$name = $row['name'];
return createPath($row['parent_id'],$category_tbl). " <a href='index.php?folder_id=$id'>".$name."</a> >";
}
}
以下Erwin的回答给了我使其成功的所需。
function createPath($id, $category_tbl, $except = null) {
$s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
$r = mysql_query($s);
$row = mysql_fetch_array($r);
if($row['parent_id'] == 0) {
$name = $row['name'];
if(!empty($except) && $except == $row['id']) {
return "<a href='index.php'>Admin</a> » ".$name."";
}
return "<a href='index.php'>Admin</a> » <a href='index.php?folder_id=$id'>".$name."</a> » ";
} else {
if(!empty($except) && $except == $row['id']) {
$name = $row['name'];
return createPath($row['parent_id'],$category_tbl, false). " $name";
}
$name = $row['name'];
return createPath($row['parent_id'],$category_tbl, false). " <a href='index.php?folder_id=$id'>".$name."</a> »";
}
}
答案 0 :(得分:3)
添加第三个参数,该参数将是不应呈现为标记的链接名称
function createPath($id, $category_tbl, $except = null) {
$s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
$r = mysql_query($s);
$row = mysql_fetch_array($r);
if($row['parent_id'] == 0) {
$name = $row['name'];
return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
} else {
$name = $row['name'];
if(!empty($except) && $except == $name)
return createPath($row['parent_id'],$category_tbl, $except)." ".$name;
}
return createPath($row['parent_id'],$category_tbl, $except). " <a href='index.php?folder_id=$id'>".$name."</a> >";
}
}
答案 1 :(得分:1)
该代码不会向后反映结果Lemon > Orange > Fruits > Home
吗?正如joni建议的那样,我将结果放在一个数组中,然后构建输出字符串。
如果您在数据库中有其他所需信息,例如folder_id=$id
以外的网址,则可以将其存储为
$breadcrumb_items = array(
0 => array( 'id' => '3',
'title' => 'Lemon',
'url' => 'LemonURL'
),
1 => array( 'id' => '2',
'title' => 'Orange',
'url' => 'OrangeURL'
),
2 => array( 'id' => '1',
'title' => 'Fruit',
'url' => 'FruitURL'
),
3 => array( 'id' => '0',
'title' => 'Home',
'url' => 'HomeURL'
)
);
然后调用array_reverse
来修复数组顺序,然后构建你的html。确保设置一个标志以防止最后一项成为链接。
$targetID = 3; //Lemon
foreach( $breadcrumb_items as $breadcrumb ){
...
if( $breadcrumb['id'] != $targetID ){ //if the id does not match our target id
//add link code
}
...
}
答案 2 :(得分:0)
不是及时输出,而是创建一个数组并在那里缓冲结果。在数组被createPath()
填充之后,您可以通过for循环输出面包屑,该循环知道最后一个元素是哪个(通过count()
)并且可以避免从中生成链接。