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(' ♥ ') ?>

実例を見るのに最も簡単な場所はここです。ブレッドクラムの3番目のリンクをクリックすると、2番目のネストされたフォルダーが無視されます。問題をトラブルシューティングするのに十分な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スクリプトが正常に実行されていると仮定すると、httpd.confにこれを追加するためにApacheを使用している場合は、スクリプトが正常に実行されていることがわかります。

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

スクリプトが問題を引き起こす場合は、すでに与えられている答えの1つを試してください

于 2013-01-01T23:54:05.210 に答える