0

那么我有这个代码 -

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

你们建议我如何解决这个问题?

4

2 回答 2

2

试试这个:

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.'/';

于 2011-01-10T23:28:45.237 回答
1

鉴于您的$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:我是尤达条件句的粉丝。

于 2011-01-10T23:27:23.280 回答