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

20 Мар 2008
Опубликовано VladSavitsky

Решение

<?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>";
  }
}
?>

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

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

Авторы решений:
Версия Drupal:

Комментарии

Для этого также есть модуль Taxonomy Menu

Гость | Сен 15th, 2008 в 10:03 утра

Косяк. Код считает также и неопубликованные ноды.
И кажется при выводе последнего пункта нет закрывающего тэга /li

Ветер | Сен 6th, 2009 в 8:44 после полудня

Выводит неопубликованные ноды.
В последнем пункте не выводится закрывающий тег /li

Ветер | Сен 6th, 2009 в 8:47 после полудня

Да, считает все ноды и опубликованные, и - нет. Если нужно - просто вставьте проверку в запрос.

VladSavitsky | Сен 14th, 2009 в 8:17 после полудня

Добрый день!
Это скрипт для друпал 6 ? У меня на шестом пустой блок, зато работает этот скрипт, но он к сожалению выводит меню в развернутом виде, подскажите, как сделать свернутое?
<?php
$vid = 1; /* <---- put correct vocabulary ID here */
$terms = taxonomy_get_tree($vid);
print '

    ';
    foreach ( $terms as $term ) {
    $tcount = taxonomy_term_count_nodes($term->tid);
    $children_terms = taxonomy_get_children($term->tid);
    if ($term->depth == 0) {
    print "
  • ";
    print l($term->name." (".$tcount.")",'taxonomy/term/'
    . $term->tid, array('title' => $tcount." posts in "
    .$term->name));
    if ($children_terms) {
    print "
      ";
      foreach ( $children_terms as $children_term ) {
      $t_children_count =
      taxonomy_term_count_nodes($children_term->tid);
      print "
    • ";
      print l($children_term->name." (".$t_children_count.")",
      'taxonomy/term/'.$children_term->tid, array('title' =>
      $t_children_count." posts in ".$children_term->name));
      print "
    • ";
      }/* end foreach children */
      print "

    ";
    }
    print "

  • ";
    }
    } /* end foreach */
    print "

";
?>

Гость | Дек 30th, 2009 в 10:41 после полудня

как сделать меню сворачивающимся?

Гость | Дек 31st, 2009 в 2:15 утра

Использовать fieldset и свойство collapsable

VladSavitsky | Янв 1st, 2010 в 11:18 после полудня
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>