Вывести облако тегов в блоке

30 Сен 2008
Опубликовано VladSavitsky

Решение

Варианты решений

Сниппет для вывода облака тегов заданного словаря

Показывает облако тегов заданного словаря - переменная $voc.

<?php
$max_fontsize = 150; // Размер шрифта для тэга с максимальным весом
$min_fontsize = 90;  // Размер шрифта для тэга с минимальным весом
$metrics = '%';      // в чем измеряется размер px,pt,em,%
$voc = 3;            // vid словаря
// получим максимальны и минимальный вес терминов в словаре
$result = db_query(db_rewrite_sql("SELECT max(cnt) AS maxcnt,min(cnt) AS mincnt
FROM {term_data} td  INNER JOIN
(SELECT tn.tid,COUNT(tn.nid) as cnt  FROM {term_node} tn
INNER JOIN {node} n ON n.nid=tn.nid GROUP BY tn.tid) n
ON n.tid=td.tid AND td.vid=%d"
),$voc);
$term = db_fetch_object($result);
$min_weight = $term->mincnt;
$max_weight = $term->maxcnt;
// вычислим коэффициент для размера шрифта
if ($min_weight == $max_weight ) {
    $font_metric_koof = 0;
}
else {
    $font_metric_koof = ($max_fontsize - $min_fontsize) / ($max_weight - $min_weight);
}
$result = db_query(db_rewrite_sql("SELECT td.tid,td.name,n.cnt
FROM {term_data} td  INNER JOIN
(SELECT tn.tid,COUNT(tn.nid) as cnt  FROM {term_node} tn
INNER JOIN {node} n ON n.nid=tn.nid GROUP BY tn.tid) n
ON n.tid=td.tid AND td.vid=%d ORDER BY td.name"
),$voc);
$tags = '';
while($term = db_fetch_object($result)) {
 $size = $min_fontsize + ($term->cnt - $min_weight) * $font_metric_koof;
 $style = 'font-size: '.$size.$metrics.';';
 $tags .= l($term->name,'taxonomy/term/'.$term->tid,
   array('attributes' => array('style' => $style,'class' => 'tags-voc-'.$voc))).' ';
}
if (!empty($tags)) {
  print '<tags class="voc-'.$voc.'">'.$tags.'</tags>';
}
?>

Темизация
Для темизации всего блока можно использовать стилизацию tags.voc-номер-словоря,
для темизации терминов a.tags-voc-номер-словоря.

Модуль tagadelic

  • Установить модуль Tagadelic (http://drupal.org/project/tagadelic)
  • На странице настройки блоков включить блок с облаком тегов для нужного словаря

Вывод

Полезные рецепты по этой теме

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

Небольшой сниппет вместо модуля tagadelic (Облоко тэгов)

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

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

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

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

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

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