Drupal - 根据节点的分类术语ID显示块

时间:2010-07-07 10:06:00

标签: php drupal

我只是想限制具有特定分类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;
      }
    }
  }
?>

...但我没有喜悦,该块仍隐藏在相关节点上。

有什么想法吗?

干杯

1 个答案:

答案 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'重新放入。