2013-01-01 45 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> 

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