2016-07-24 95 views
0

我想在树枝中创建动态的面包屑导航。 示例url www.example.com/section/page 我想获取url,将其分割为面包屑,例如:home > section > page 我找到了这个可以工作的php代码。任何人都可以帮助它转换成树枝?如何在树枝中创建动态的面包屑导航

<?php 
// This function will take $_SERVER['REQUEST_URI'] and build a breadcrumb based on the user's current path 
function breadcrumbs($separator = ' &raquo; ', $home = 'Home') { 
    // This gets the REQUEST_URI (/path/to/file.php), splits the string (using '/') into an array, and then filters out any empty values 
    $path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))); 

    // This will build our "base URL" ... Also accounts for HTTPS :) 
    $base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; 

    // Initialize a temporary array with our breadcrumbs. (starting with our home page, which I'm assuming will be the base URL) 
    $breadcrumbs = array("<a href=\"$base\">".$home."</a>"); 

    // Find out the index for the last value in our path array 
    //$last = end(array_keys($path)); 

    // Build the rest of the breadcrumbs 
    foreach ($path AS $x => $crumb) { 
     // Our "title" is the text that will be displayed (strip out .php and turn '_' into a space) 
     $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb)); 

     // If we are not on the last index, then display an <a> tag 
     if ($x != $last) 
      $breadcrumbs[] = "<a href=\"".$base.$crumb."\">".$title."</a>"; 
     // Otherwise, just display the title (minus) 
     else 
      $breadcrumbs[] = $title; 
    } 

    // Build our temporary array (pieces of bread) into one big string :) 
    return implode($separator, $breadcrumbs); 
} 

?> 

<p><?= breadcrumbs() ?></p> 
<p><?= breadcrumbs(' > ') ?></p> 
<p><?= breadcrumbs(' ^^ ', 'Index') ?></p> 
+0

取得了一些进展...'{%组末页= '嗒嗒' %} \t

  • home
  • \t
  • {{ page }}
  • \t
  • {{末页}}
  • '不能工作,如何获得,虽然当前页面的名称。需要弄清楚如何做一个'foreach'语句... – user3464091

    +0

    这个http://stackoverflow.com/questions/2594211/php-simple-dynamic-breadcrumb?rq=1可能有帮助吗? – user3464091

    回答

    0

    您不需要该功能转化为Twig,你就可以告诉Twig通过扩展twig,以使该功能可在模板中为您提供:

    $twig = new Twig_Environment($loader); 
    $function = new Twig_SimpleFunction('breadcrumb', function ($separator = ' &raquo; ', $home = 'Home') { 
        $path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))); 
    
        // This will build our "base URL" ... Also accounts for HTTPS :) 
        $base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; 
    
        // Initialize a temporary array with our breadcrumbs. (starting with our home page, which I'm assuming will be the base URL) 
        $breadcrumbs = array("<a href=\"$base\">".$home."</a>"); 
    
        // Find out the index for the last value in our path array 
        //$last = end(array_keys($path)); 
    
        // Build the rest of the breadcrumbs 
        foreach ($path AS $x => $crumb) { 
         // Our "title" is the text that will be displayed (strip out .php and turn '_' into a space) 
         $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb)); 
    
         // If we are not on the last index, then display an <a> tag 
         if ($x != $last) 
          $breadcrumbs[] = "<a href=\"".$base.$crumb."\">".$title."</a>"; 
         // Otherwise, just display the title (minus) 
         else 
          $breadcrumbs[] = $title; 
        } 
    
        // Build our temporary array (pieces of bread) into one big string :) 
        return implode($separator, $breadcrumbs); 
    }); 
    $twig->addFunction($function); 
    

    然后,您可以使用此里面twig功能,无论你想:

    <!DOCTYPE html> 
    <html> 
        <head> 
         <meta charset="UTF-8" /> 
        </head> 
        <body> 
         <nav> 
          {{ breadcrumbs() }} 
         </nav> 
        </body> 
    </html>