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);
}

そして、私が次のページの URL にいるとしましょう:

http://www.mysite.com/forums/general/log-book

この関数は、ブレッドクラムを として正しく表示しますHome » Forums » General » Log Book

http://www.mysite.com/generalただし、ブレッドクラム リンクの 1 つをクリックすると、基本的なサイトの URL 構造に戻るだけです。

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_HOSTSERVER_NAME代わりに使用してください。前者は、HTTP リクエストのHost: ...フィールドを使用して偽造できます。

注 2: 私は Yoda 条件文のファンです。

于 2011-01-10T23:27:23.280 に答える