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 回答
0

这是解决方案`

  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 = taxonomy_get_nested_tree($parents_index[$term->tid], $max_depth, $term->tid, $parents_index, $depth + 1);
    }
  }

  return $return;
}

function output_taxonomy_nested_tree($tree) {
    if (count($tree)) {
        $output = '<ul class="nav navbar-nav">';
        foreach ($tree as $term) {            
             $output .= '<li class="taxonomy-term">' . l($term->name, "taxonomy/term/". $term->tid);


            if ($term->children) {
                $output .= output_taxonomy_nested_tree($term->children);
            }
            $output .= '</li>';
        }
        $output .= '</ul>';
    }
    return $output;
}
$tree= taxonomy_get_nested_tree(2,10);
$output=output_taxonomy_nested_tree($tree);
echo $output;`

如果您想在特定区域打印它,您只需将输出分配给预处理器函数中的变量并在页面 tpl 文件中打印变量。

$output=output_taxonomy_nested_tree($tree); 回声$输出;`

$variables['output'] .=output_taxonomy_nested_tree($tree);

放置线

<?php print $output;?>

在您的页面 tpl 文件中

于 2017-02-22T09:33:17.197 回答