URL <==> BREADCRUMBs

Главные вкладки

Аватар пользователя MCNet MCNet 16 декабря 2007 в 14:28

Долгое время меня раздражало, что url не соответствует навигации.

Нашел неплохой способ решить проблему тут, но в найденном вареанте был небольшой минус: отсутствует возможнотсть влиять на название _хлебных_крошек_. После небольшой доработки это можно делать с помощью модуля "locales" путём _перевода_ нужных строк.

Например:
при добавлении вида под названием, my_simple_view, в навигации так и будет написано "my_simple_view". Это можно исправить в переводах, переименовать my_simple_view, к примеру в "фотогалерея".

В templates.php пишем:

function url_breadcrumbs() {
  function get_crumb($lvl) {
    $uri_request_id = $_SERVER['REQUEST_URI'];
    $urlexplode = explode("?", $uri_request_id);
    $url = explode("/",$urlexplode[0]);
    if($url[$lvl]){
      if($lvl > 1) {
        $var = array_keys($url);
        foreach($var as $vars){
          if($vars == 1){ $urlpathpeice .= $url[$vars]; }
          if($vars <= $lvl && $vars > 1){ $urlpathpeice .= '/'.$url[$vars]; }
        }
        $urlpathalias = $urlpathpeice;
      } elseif ($lvl == 1) { $urlpathalias = $url[$lvl]; }
      $urlsystem = drupal_lookup_path('source', $urlpathalias);
      $urlsystemexplode = explode("/", $urlsystem);
      $urltype = $urlsystemexplode[0];

      if($urltype == "taxonomy"){
        $term = taxonomy_get_term($urlsystemexplode[2]);
        if($url[$lvl+1]){
          return  '<a href="/'.$urlpathalias.'" title="'.$term->name.'">'.$term->name.'</a>';
        } else { return  ''.t($term->name).''; }
      } elseif($urltype == "node"){
        $node = node_load($urlsystemexplode[1]);
        if($url[$lvl+1]){
          return  '<a href="/'.$urlpathalias.'" title="'.$nodename.'">'.$node->title.'</a>';
        } else { return  ''.$node->title.''; }
      } else {
        $urltitleexplode = explode("-", $url[$lvl]);
        $words = array_keys($urltitleexplode);
        foreach($words as $word){ $urltitle .= ''.ucwords($urltitleexplode[$word]).' '; }
        if($url[$lvl+1]) {
          return  '<a href="/'.$urlpathalias.'" title="'.$urltitle.'">'.t(trim($urltitle)).'</a>';
        } else { return  ''.t(trim($urltitle)).''; }
      }
    }
  }
  function get_crumb_all() {
    $uri_request_id = $_SERVER['REQUEST_URI'];
    $urlexplode = explode("?", $uri_request_id);
    $url = explode("/",$urlexplode[0]);
    $numbs = array_keys($url);
    foreach($numbs as $numb) {
      $crumbs[] = ''.get_crumb($numb);
    }
  return implode(' &raquo; ', $crumbs);
  }
  $output .= '<div class="breadcrumb">';
  $output .= '<a href="/" title="Home">'.t('Home').'</a>';
  $output .= ''.get_crumb_all().'';
  $output .= '</div>';
return $output;
}

Далее в page.tpl.php

print url_breadcrumbs();

Комментарии

Аватар пользователя Dimm Dimm 17 декабря 2007 в 18:00

Путь в "хлебных крошках" соответствует навигации в меню .
Как пропишешь вложенность пунктов меню до текущей страницы - так путь в "хлебных крошках" и отобразится.