11. Как вывести список терминов словаря со счётчиками?

Оригинал рецепта находится по адресу: http://content-management-systems.info/node/909

Автор Separator@drupal.org

Список терминов определенного словаря, с подсчетом количество документов отмеченных термином, с сортировкой по количеству документов как по возрастанию, так и по убыванию (наверное лишнее, так как скорей всего сортировать будут только по убыванию). Показ ограниченного количества терминов и ограничение показа терминов по количество документов.

Один из компонентов поиска на данном сайте выполнен по этому рецепту

Пример для страницы

<?php
    $vid 
2// Номер словаря
    
$terms_count // Сколько терминов отображать, 0 - все
    
$show_node_count true// Показывать или нет количество нод
    
$show_min_count false// Показывать термины с большим количеством нод, -1  - все ноды
    
$sort false// Сортировать в порядке возрастания при true, а при false в порядке убывания
   
    
$output '';
    
$items = array();
    
$term_name = array();
    
$terms taxonomy_get_tree($vid);
    foreach (
$terms as $term) {
        
$count db_result(db_query('SELECT COUNT(nid) FROM {term_node} WHERE tid = %d'$term->tid));
        
$items[$term->tid] = $count;
        
$term_name[$term->tid] = $term->name;
    }
    if (
$sort) {
        
asort($itemsSORT_NUMERIC);
    } else {
        
arsort($itemsSORT_NUMERIC);
    }
    
$list = array();
    
$i ;
    foreach (
$items as $term => $count) {
        if (
$count == $show_min_count) {
            break;
        }
        
$value l($term_name[$term], 'taxonomy/term/'.$term);
        if (
$show_node_count) {
            
$value .= ' ['.$count.']';
        }
        
$list[] = $value;
        
$i++;
        if (
$i == $terms_count) {
            break;
        }
    }
    if (
count($list)) {
        
$output .= theme('item_list'$list);
    }
   
    print 
$output;
?>

Пример для блока


<?php
    $vid 
2// Номер словаря
    
$terms_count 10// Сколько терминов отображать, 0 - все
    
$show_node_count false// Показывать или нет количество нод
    
$show_min_count 1// Показывать термины с большим количеством нод, -1  - все ноды
    
$sort false// Сортировать в порядке возрастания при true, а при false в порядке убывания
   
    
$output '';
    
$items = array();
    
$term_name = array();
    
$terms taxonomy_get_tree($vid);
    foreach (
$terms as $term) {
        
$count db_result(db_query('SELECT COUNT(nid) FROM {term_node} WHERE tid = %d'$term->tid));
        
$items[$term->tid] = $count;
        
$term_name[$term->tid] = $term->name;
    }
    if (
$sort) {
        
asort($itemsSORT_NUMERIC);
    } else {
        
arsort($itemsSORT_NUMERIC);
    }
    
$list = array();
    
$i ;
    foreach (
$items as $term => $count) {
        if (
$count == $show_min_count) {
            break;
        }
        
$value l($term_name[$term], 'taxonomy/term/'.$term);
        if (
$show_node_count) {
            
$value .= ' ['.$count.']';
        }
        
$list[] = $value;
        
$i++;
        if (
$i == $terms_count) {
            break;
        }
    }
    if (
count($list)) {
        
$output .= theme('item_list'$list);
    }
    
$output .= '<br />'.l(t('More...'), 'node/77');
   
    print 
$output;
?>