1

我将此处找到的代码用于我的网站的动态 php 面包屑。效果很好!但是,如果我将文件夹嵌套超过 1 层,则会导致错误。

这是我目前用于面包屑的代码。

    <?php
    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>");
        $last = end(array_keys($path));
        foreach ($path AS $x => $crumb) {
            $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb));
            if ($x != $last)
                $breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
            else
                $breadcrumbs[] = $title;
        }
        return implode($separator, $breadcrumbs);
     }
    ?>
    You are here: <?= breadcrumbs(' ♥ ') ?>

最容易看到现场示例的地方是这里。如果单击面包屑上的第三个链接,它将忽略第二个嵌套文件夹。我不知道足够多的 PHP 来解决问题以及如何解决它。我认为理想情况下它会监视 url 中的嵌套文件夹。

4

3 回答 3

0

您需要添加以前的碎屑以使其正常工作。这是一个修复:

<?php
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>");
    $last = end(array_keys($path));
    foreach ($path AS $x => $crumb) {
        $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb));
        if ($x != $last)
            $breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
        else
            $breadcrumbs[] = $title;
        $base .= $crumb . '/';
    }
    return implode($separator, $breadcrumbs);
 }
?>
You are here: <?= breadcrumbs(' ♥ ') ?>
于 2013-01-01T23:50:10.583 回答
0

那是因为您只是链接到当前的“面包屑”$base$crumb

因为您需要在构建链接时跟踪路径

foreach ($path AS $x => $crumb) {
            $base .= $crumb.'/';   // <- keep adding crumbs to current path
            $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb));
            if ($x != $last)
                $breadcrumbs[] = "<a href=\"$base\">$title</a>";  //<- link to current path
            else
                $breadcrumbs[] = $title;
        }
于 2013-01-01T23:51:08.703 回答
0

假设你的脚本运行良好,我看到你有open_basedir restriction in effect,所以如果你在 apache 上,你必须把它添加到你的 httpd.conf

<Directory /var/www/vhosts/domain.tld/httpdocs>
 php_admin_value open_basedir none
 </Directory>

如果脚本导致问题,请尝试已经给出的答案之一

于 2013-01-01T23:54:05.210 回答