Drupal - 根据节点的分类术语ID显示块 [英] Drupal - display blocks according to node's taxonomy term ID

查看:137
本文介绍了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;
}
}
}
?>

...但我没有快乐,该块仍然隐藏在相关节点上。 >

任何想法?



干杯

解决方案

看起来像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' back in。


I'm just trying to restrict block visibility to nodes that have a certain taxonomy ID. I'm using this snippet...:

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

...but I get no joy, the block remains hidden on the relevant nodes.

Any ideas?

Cheers

解决方案

It looks like in drupal6 taxonomy_node_get_tree() takes a node rather than a nid.

The easiest way to change your code is:

<?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() caches nodes in memory so it won't be a big performance hit.

But wait! you may be able to refine this even further...

menu_get_item() will get the currently loaded menu item when the node object is loaded it will call taxonomy_node_get_terms(). So you can simplify to:

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

This will get other object types wich have a taxonomy object which could cause some confusion, if so stick the arg(0) == 'node' back in.

这篇关于Drupal - 根据节点的分类术语ID显示块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆