2013-01-01 44 views
1

我使用代碼here爲我的網站動態php breadcrumbs。它很棒!但是,如果我將文件夾嵌套深度超過1,則會導致錯誤。Dynamic Breadcrumbs not see nested folders

這是我目前面包屑的代碼。

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

最容易看到現場實例的地方是here。如果您單擊麪包屑上的第三個鏈接,它將忽略第二個嵌套文件夾。我不知道足夠的PHP來解決問題以及如何解決問題。我會認爲它會監視url中的嵌套文件夾。

回答

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

工作完美!謝謝! – Pagangirl86

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

假設你的腳本運行良好,我看你有沒有open_basedir restriction in effect所以你必須,如果你在Apache將它添加到你的httpd.conf

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

如果腳本導致問題嘗試已經給出的答案之一