【问题标题】:Drupal - display blocks according to node's taxonomy term IDDrupal - 根据节点的分类术语 ID 显示块
【发布时间】:2010-07-07 10:05:59
【问题描述】:

我只是试图将块的可见性限制为具有特定分类 ID 的节点。我正在使用这个 sn-p...:

<?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;
      }
    }
  }
?>

...但我不高兴,该块仍然隐藏在相关节点上。

有什么想法吗?

干杯

【问题讨论】:

    标签: php drupal


    【解决方案1】:

    看起来在 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' 重新插入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      相关资源
      最近更新 更多