Как отобразить термины таксономии в иерархическом порядке? - PullRequest
0 голосов
/ 02 августа 2011

У меня есть словарь, который отображает термины в порядке иерархий, как показано ниже.

  • parent1

    • child1
    • child2
  • parent2
    • child1
  • parent3
  • parent4
    • child1
    • child2
    • child3

Отображается в диспетчере таксономии.

Я хочу создать страницу, на которой я вызываю функцию, передаю 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;

Есть идеи по этому поводу?

Ответы [ 3 ]

1 голос
/ 21 мая 2015

Я использую это:

$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;
}

Наслаждайтесь!

0 голосов
/ 22 февраля 2017

Вот решение `

  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);echo $ output; `

до

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

поместитьстрока

<?php print $output;?>

в файле tpl вашей страницы

0 голосов
/ 03 августа 2011

taxonomy_get_tree() должен возвращать условия в правильном порядке, но массив является плоским, а не вложенным. См. taxonomy_get_tree () для получения дополнительной информации и некоторых примеров функций для получения вложенного массива.

...