0

次のような階層順に用語を表示する語彙があります。

  • 親1

    • 子1
    • 子2
  • 親2
    • 子1
  • 親3
  • 親4
    • 子1
    • 子2
    • 子3

これは分類マネージャに表示されます。

関数を呼び出して vid を渡し、タクソノミー マネージャーと同じように、その語彙のタクソノミー用語を階層順に表示するページを作成したいと考えています。次のコードを使用しましたが、ツリー順ではなく分類用語のみが表示されます。

$vid = 26;
$tree = taxonomy_get_tree($vid);
foreach($tree as $term) {
  $output =  l($term->name, taxonomy_term_path($term));
  if ($term->children) {
    $output .= theme('illogica_category_tree', $term->children);
  }
}

print $output;

これについて何か考えはありますか?

4

3 に答える 3

1

私はこれを使用します:

$tree = extranet_get_nested_tree((int)$vid, null, $tid);

これとともに:

function extranet_get_nested_tree($terms = array(), $max_depth = NULL, $parent = 0, $parents_index = array(), $depth = 0) {
  if (is_int($terms)) {
    $terms = taxonomy_get_tree($terms);
  }

  foreach($terms as $term) {
    foreach($term->parents as $term_parent) {
      if ($term_parent == $parent) {
        $return[$term->tid] = $term;
      }
      else {
        $parents_index[$term_parent][$term->tid] = $term;
      }
    }
  }

  foreach($return as &$term) {
    if (isset($parents_index[$term->tid]) && (is_null($max_depth) || $depth <     $max_depth)) {
      $term->children = extranet_get_nested_tree($parents_index[$term->tid],     $max_depth, $term->tid, $parents_index, $depth + 1);
    }
  }
  return $return;
}

そしてそれを印刷するには:

    function extranet_output_nested_tree($tree) {
    if (count($tree)) {
        $output = '<ul class="nested-taxonomy-tree">';
        foreach ($tree as $term) {
            $output .= '<li class="taxonomy-term">';
            $output .= t($term->name); //, taxonomy_term_path($term));
            if ($term->children) {
                $output .= extranet_output_nested_tree( $term->children);
            }
            $output .= '</li>';
        }
        $output .= '</ul>';
    }
    return $output;
}

楽しみ!

于 2015-05-21T09:49:03.840 に答える
0

taxonomy_get_tree()正しい順序で用語を返す必要がありますが、配列は入れ子ではなくフラットです。詳細については、 taxonomy_get_tree()を参照し、ネストされた配列を取得するためのサンプル関数をいくつか参照してください。

于 2011-08-03T15:21:08.433 に答える