【发布时间】:2009-09-24 17:31:24
【问题描述】:
当我只有“孩子”的 TID 时,我希望从分类术语(例如祖父母/父母/孩子)生成分层面包屑。我一直在玩弄taxonomy_get_tree(),但如果没有非常繁重的迭代,似乎很难做到。必须有更简单的方法。
想法?
谢谢!
【问题讨论】:
当我只有“孩子”的 TID 时,我希望从分类术语(例如祖父母/父母/孩子)生成分层面包屑。我一直在玩弄taxonomy_get_tree(),但如果没有非常繁重的迭代,似乎很难做到。必须有更简单的方法。
想法?
谢谢!
【问题讨论】:
Taxonomy Breadcrumb 似乎提供了这个功能。
如果您不想使用该模块,代码可能会提供灵感。
【讨论】:
这就是我的工作:
$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") 函数中。
【讨论】:
如果您使用的是 Drupal 7,Taxonomy Breadcrumb 还处于开发版本,您必须编写代码。
更完整的解决方案可能如下(将此函数放在 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'>»</span>", $breadcrumb) . '</div>';
return $output;
}
}
【讨论】:
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'>»</span>", $breadcrumb) . '</div>';
return $output;
}
}
【讨论】: