2010-07-20 8 views
0

나는 뷰 인수에 노드 용어의 부모 용어 id를 넣으려고 힘썼다. 왜 그런 이상한 일을하려고하는지 설명해 드리겠습니다. 글쎄, 용어 페이지에서 그 용어 아래에있는 모든 노드의 목록을 가진 블록을 보여주고 있습니다. 그러나 노드에서 클릭하는 순간 뷰의 기본 인수 (용어 ID)가 다음과 같이 사라집니다 : if (arg (0) == 'taxonomy'& & arg (2)! = '') { return arg (2); } 팀 >> 국가 >> 호주 >> 기능, 기사 등의 분류 체계를위한 것입니다. 여기에 : 어휘는 팀 : 국가는 주요 용어, 호주는 아동 용어 및 기능, 기사 등은 자녀의 용어입니다 괜찮습니다. 그러나 해당 용어의 노드 페이지에도 차단을 표시하고 싶기 때문에 해당 노드의 용어 parent'ID [노드가 Feature 아래에 기사가 있고 내가 보여주는 노드 목록 블록이 Under Australia term]. 다음과 같은 인수를 추가 할 수 있도록 elseif (arg (0) == 'node') { ...... Plz 도움말.드루팔 (Drupal) - 부모 용어 노드의 용어

답변

2

질문을 올바르게 이해하면 노드 용어의 직계 부모와 동일한 택 소노 미 용어를 가진 모든 노드를 표시하는 블록을 표시하려고합니다. 노드에 a> b (a가 b의 부모)라는 용어가 2 개있는 경우 a는 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)); 
} 

이 솔루션은 위의 용어 인수에 대한 깊이 속성과 깊이 수정처럼 작동합니다.