Список терминов определённого словаря с иерархией + количество документов

Задача

Вывести иерархический список терминов определённого словаря.
Каждый термин является ссылкой на страницу с анонсами статей, принадлежащих этому термину.
Рядом с каждым термином выводится количество документов.
Если документов нет, то нуль не выводится и название термина не является ссылкой.

Решение

<?php
$vid
= 13// Номер словаря
$pole = array();
$items = array();
$terms = taxonomy_get_tree($vid);
//var_dump($terms);

foreach ( $terms as $term ) {
 
$count = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d", $term->tid));
 
$pole[]=Array ((($count) ? l($term->name, "taxonomy/term/$term->tid")." (".$count.")" : $term->name), $term->depth, $count, $term->tid);
}
$depth =-1;
foreach (
$pole as $list) {
 
//$depth- глубина предыдущего уровня
  //$list[1] - глубина текущего элемента
 
if ($list[1] == $depth) {
    echo
"</li>";
   
next;
  }
  while (
$list[1] != $depth) {
    if (
$list[1] > $depth) {
     
$depth++;
      echo
"\n<ul>";
     
next;
    }
    if (
$list[1] < $depth) {
     
$depth--;
      echo
"\n</li>\n</ul>";
    }
  }

  echo
"\n<li>$list[0]";
 
$depth=$list[1];
}

//Закрываем все открытые теги до нулевого уровня:
$depth=0;
while (
$list[1] != $depth) {
  if (
$list[1] > $depth) {
   
$depth++;
    echo
"</li>\n</ul>";
  }
}
?>

Пример вывода сниппета:
Пример иерархии

Использованные материалы

Оригинальный код содержал ошибку, которая не позволяла выводить списки с большим разбросом глубины. То есть при резком изменении глубины терминов скрипт это не обрабатывал и теги оставались не закрытыми. В этом коде это исправлено.

Полезные ссылки