0

ブロック内の特定の分類用語の子用語を表示するという問題と戦った結果、ここでまさに私が望んでいることを実行するコードの一部にようやく出会いました。

指示に従って、次をtemplate.phpに追加しました

function themename_child_terms($vid = 1) {
  if(arg(0) == 'taxonomy' && arg(1) == 'term') {   
    $children = taxonomy_get_children(arg(2), $vid);
      if(!$children) {
        $custom_parent = taxonomy_get_parents(arg(2));
          $parent_tree = array();
          foreach ($custom_parent as $custom_child => $key) {
            $parent_tree = taxonomy_get_tree($vid, $key->tid);
          }
          $children = $parent_tree;
      }

    $output = '<ul>';
    foreach ($children as $term) {
      $output .= '<li>';
      $output .= l($term->name, 'taxonomy/term/' . $term->tid);
      $output .= '</li>';
    }
    $output .= '</ul>';

    return $output;
  }
}

次に、ブロックを作成して追加しました:

<?php // $vid is the vocabulary id.
    print themename_child_terms($vid = 1);
?>

これにより、現在のタームの子タームが完全に表示されます。ただし、その用語を使用するコンテンツがなくても、親用語の下に存在するすべての用語が表示されます。

たとえば、ターム 1 のすべてのアイテムを含むページを表示すると、次のようになります。

子 1
子 2
子 3

ブロックに正しくリストされています。ただし、たとえば「子 3」でタグ付けされたコンテンツがない場合でも、ブロック内にその用語が引き続き表示されます。これは、空の用語ページにリンクしているため、あまり役に立ちません。実際に項目が関連付けられている子のみを表示するようにコードを変更するにはどうすればよいでしょうか。したがって、「Child 3」とタグ付けされた子供がいない場合、その用語は表示されません。簡単な改造ですか?

解決策をよろしくお願いします。

ニック

Drupal 6 の操作

4

1 に答える 1