Не работают правильные ссылки - PullRequest
0 голосов
/ 11 января 2011

Ну, у меня есть этот код -

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

эта функция правильно отображает крошкиas Home » Forums » General » Log Book.

Однако, когда я нажимаю на одну из ссылок «хлебных крошек», она возвращается только к базовой структуре URL сайта - например, «Общие» возвращаются к http://www.mysite.com/general, когда на самом деле они

http://www.mysite.com/forums/general

Как вы, ребята, предлагаете мне исправить это?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Попробуйте вместо этого:

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

1 голос
/ 11 января 2011

Учитывая, что ваш массив $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: Я поклонник условностей Йоды.

...