面包屑链接正确

问题描述:

嗯,我有这样的代码 -面包屑链接正确

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 = ' &raquo; ', $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.'/';

+0

辉煌的队友!从来没有想过从这个意义上看待它。非常感谢你。 – SineCosine 2011-01-10 23:32:16

鉴于你$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