面包屑链接正确
问题描述:
嗯,我有这样的代码 -面包屑链接正确
function breadcrumbs($separator = ' » ', $home = 'Home') {
$path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));
$base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';
$breadcrumbs = Array("<a href=\"$base\">$home</a>");
foreach ($path AS $x => $crumb) {
$title = ucwords(str_replace(Array('.php', '_', '-'), Array('', ' ', ' '), $crumb));
$breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
}
return implode($separator, $breadcrumbs);
}
而且可以说,我在页面网址:
http://www.mysite.com/forums/general/log-book
此功能正确显示面包屑Home » Forums » General » Log Book
。
然而,当我在面包屑的一个点击的链接,只追溯到基本的站点URL结构 - 如“常规”可以追溯到http://www.mysite.com/general
,而实际上应该去
http://www.mysite.com/forums/general
你们如何建议我去解决这个问题?
答
试试这个:
function breadcrumbs($separator = ' » ', $home = 'Home') {
$path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));
$base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';
$breadcrumbs = Array("<a href=\"$base\">$home</a>");
foreach ($path AS $x => $crumb) {
$title = ucwords(str_replace(Array('.php', '_', '-'), Array('', ' ', ' '), $crumb));
$breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
$base = $base.$crumb.'/';
}
return implode($separator, $breadcrumbs);
}
注意改变的线$base = $base.$crumb.'/';
答
鉴于你$path
阵列看起来像:
array(
'forums',
'general',
'log-book'
)
你可能会向后遍历它:
while (NULL !== ($crumb = array_shift($path))) {
$title = ucwords(str_replace(Array('.php', '_', '-'), Array('', ' ', ' '), $crumb));
$url = implode('/', $path) . '/' . $crumb;
$breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
}
注1:不要依赖于HTTP_HOST
。改为使用SERVER_NAME
。前者可以使用HTTP请求的Host: ...
字段伪造。
注2:我是Yoda条件的粉丝。
+0
嗯好风风火火注1.谢谢你的提示 – SineCosine 2011-01-10 23:33:49
辉煌的队友!从来没有想过从这个意义上看待它。非常感谢你。 – SineCosine 2011-01-10 23:32:16