Drupal 6-节点术语的父项id

时间:2010-07-20 19:57:21

标签: drupal-6

我一直在努力将这个节点的术语的父术语id放在views参数中。让我解释为什么我要做这么奇怪的事情。好吧,在术语页面上,我显示了一个块,其中列出了该术语下的所有节点。但是,只要在任何节点上单击,该块就会消失,因为视图中的默认参数(对于term id)是: if(arg(0)=='taxonomy'&& arg(2)!=''){   return arg(2); } 这就是像团队>>国家>>澳大利亚>>这样的分类安排。功能,文章等 这里:词汇是团队:国家是主要术语,澳大利亚是儿童术语和特征,文章等是儿童的子女术语  好的,可以。但由于我想在该术语的节点页面上显示Block,我想拉出该节点的术语的父术语'ID [因为节点是(比如说)Feature下的一篇文章,我正在展示的节点列表块是Under Australia这个术语。所以我可以添加更多的参数: elseif(arg(0)=='node'){ 然后 ...... Plz的帮助。

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,您希望显示一个块,该块显示与该节点的术语的直接父项具有相同分类术语的所有节点。 如果节点具有2个项a> b(即a是b的父项),则该项是a。 如果你有一个> b> c并且所有这些都已设置,那么你有a和b作为一些术语父母。然后该块必须显示所有具有a和b作为术语的节点。

所以继续是:

else if (arg(0) == 'node' && is_numeric(arg(1)))) {
  $n = node_load(arg(1));
  $vid = 0; // change for the required vocabulary
  $tids = array(); // will hold all the parents of the node's terms

  foreach ($n->taxonomy as $tid => $term) {
    if ($term->vid == $vid) {
      $parents = taxonomy_get_parents($term->tid);

      // the term has a parent
      if (count($parents)) {
        $parent = array_shift($parents);
        $tids[] = $parent->tid;
        // if you require only one parent term, return the first one that we find
        // comment the next line if you want all terms that act as parents
        return $parent->tid;
      }
    }
  }
  // in this case, make sure that you 
  // check the 'Allow multiple terms per argument' checkbox 
  // and argument type is 'Term IDs separated by , or +'
  return implode(',', array_unique($tids));
}

在某种程度上,上面的解决方案就像术语参数的深度属性和深度修饰符一样。