我只是想限制具有特定分类ID的节点的块可见性。我正在使用这个片段......:
<?php
$term_id_to_trigger_show_block = 109;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$terms = taxonomy_node_get_terms(arg(1));
foreach($terms as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
...但我没有喜悦,该块仍隐藏在相关节点上。
有什么想法吗?
干杯
答案 0 :(得分:2)
看起来像drupal6 taxonomy_node_get_tree()需要一个节点而不是一个nid。
更改代码的最简单方法是:
<?php
$term_id_to_trigger_show_block = 109;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$node = node_load(arg(1));
$terms = taxonomy_node_get_terms($node);
foreach($terms as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
node_load()在内存中缓存节点,因此它不会受到很大影响。
但是等等!你或许可以进一步完善这个......
menu_get_item()将在加载节点对象时获取当前加载的菜单项,它将调用taxonomy_node_get_terms()。所以你可以简化为:
<?php
$term_id_to_trigger_show_block = 109;
$object = get_menu_item();
if (isset($object->taxonomy)) {
foreach($object->taxonomy as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
这将获得具有分类对象的其他对象类型,这可能会引起一些混淆,如果是这样,请将arg(0) == 'node'
重新放入。