2009-09-24 2 views
2

Я ищу для создания иерархической сундуки из термина таксономии (например, grandparent/parent/child), когда все, что у меня есть, это TID «child». Я играл с taxonomy_get_tree(), но это довольно сложно обойтись без очень тяжелой итерации. Должен быть более простой способ.Drupal: Иерархический таксономический путь для сухарей

Мысли?

Спасибо!

ответ

0

Это то, что я делаю:

$breadcrumb[] = l(t('Home'), NULL); 
if ($parents = taxonomy_get_parents_all($tid)) { 
    $parents = array_reverse($parents); 
    foreach ($parents as $p) { 
    $breadcrumb[] = l($p->name, 'taxonomy/term/'. $p->tid); 
    } 
} 
drupal_set_breadcrumb($breadcrumb); 

Я обычно придерживаться этого в hook_view() функции или hook_nodeapi($op="view") функции.

+0

ответа кредит указывая мне taxonomy_get_parents_all(). Благодаря! – 2009-09-25 20:17:49

3

Taxonomy Breadcrumb, кажется, обеспечивает эту функциональность.

Если вы не хотите использовать модуль, код может обеспечить вдохновение.

0

Если вы используете Drupal 7, таксономия Breadcrumb еще находится в dev-версии, и вам нужно закодировать.

Раствор более полной может быть продолжением (поставить эту функцию в YOUR_THEME_NAME/template.php)

function YOUR_THEME_NAME_breadcrumb($variables) 
{ 
    // init 
    $breadcrumb = $variables['breadcrumb']; 

    // taxonomy hierarchy 
    $hierarchy = array(); 
    if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) 
    { 
     $tid = (int)arg(2); 
     $parents = array_reverse(taxonomy_get_parents_all($tid)); 
     foreach($parents as $k=>$v) 
     { 
      if($v->tid==$tid) continue; 
      $breadcrumb[] = l($v->name, 'taxonomy/term/'. $v->tid);; 
     } 
    } 

    // rendering 
    if (!empty($breadcrumb)) 
    { 
     $output = '<h2 class="element-invisible">' . t('You are here') . '</h2>'; 
     $output .= '<div class="breadcrumb">' . implode("<span class='separator'>&raquo;</span>", $breadcrumb) . '</div>'; 
     return $output; 
    } 
} 
0
function yourthemename_breadcrumb($variables) 
{// init 
    $breadcrumb = $variables['breadcrumb']; 

    // taxonomy hierarchy 
    $hierarchy = array(); 
    if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) 
    { 
     $tid = (int)arg(2); 
     $parents = taxonomy_get_parents_all($tid); dpm($parents); 
     $parents = array_reverse($parents);dpm($parents); 
     $breadcrumb = array(); 
     $breadcrumb[] = l('Home', '/'); 
     foreach($parents as $k=>$v) 
     { 
      $breadcrumb[] = l($v->name, 'taxonomy/term/'. $v->tid);; 
     } 
    } 
    // rendering 
    if (!empty($breadcrumb)) 
    { 
     $output = '<h2 class="element-invisible">' . t('You are here') . '</h2>'; 
     $output .= '<div class="breadcrumb">' . implode("<span class='separator'>&raquo;</span>", $breadcrumb) . '</div>'; 
     return $output; 
    } 

}