Сниппет опупительного облака тегов

Прислано: Wincert

пн, 29/09/2008 - 14:18

Думаю многие уже видели плагин для вордпресса WP-Cumulus, он представляет из себя красивое облако тегов выводимое с помощью Flash и JS (посмотреть его можно на этом сайте про CSS). Но я не любители вордпресса ). Поэтому пришлось поковыряться в этом плагине и присобачить его к Drupal. Решил поделиться этим сниппетом с вами.

1. Модуль tagadelic нам все равно понадобиться, ведь не у всех установлен FlashPlayer и включен JS в браузере. У кого этого нет, тому будет показываться простое облако тегов которое выводится с помощью модуля tagadelic. Поэтому качаем этот модуль и устанавливаем его.

2. В формировании облака учавствуют 2 подключемых файла: SWF файл и JS файл. Прикрепить .swf к этой статье не удалось, поэтому даю ссылки со своего хоста. Качаем эти два файла, без них ниче не выйдет ).

3. И вот наконец сам сниппет который надо вставить на страницу или в блок, вообщем куда хотите, главное формат ввода поставьте "PHP code":

<?php
//Указываем ID словаря из которого будем выводить теги
$slovar "1";

//Запрос для вывода тегов 
$query "SELECT DISTINCT t.name, t.tid
  FROM {term_data} t
WHERE t.vid = 
$slovar";

//получаем результат запроса
$sql db_rewrite_sql($query);
$result db_query($sql);

//формируем теги для вывода в облаке
$ftags "<tags>";
while (
$node db_fetch_object($result)) {
    
$ftags .= '<a href="/taxonomy/term/'.$node-> tid.'" style="font-size: 10pt">'.$node-> name.'</a>';
}
$ftags .= "</tags>";

//получаем теги выводимые с помощью модуля tagadelic (будет выводиться если у пользователя не установлен FlashPlayer или не включен JS в браузере)
        
$vocs = array(1); //Список словарей 
        
$tags tagadelic_get_weighted_tags($vocs620);
        
$tags tagadelic_sort_tags($tags);
        
$output theme('tagadelic_weighted',$tags);

echo 
'<div id="tags">
'
$output .'
<script type="text/javascript" src="'
base_path() . path_to_theme() .'/swfobject.js"></script>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("'
base_path() . path_to_theme() .'/tagcloud.swf?r="+rnumber, "tagcloudflash", "230", "170", "9", "#ffffff");
widget_so.addParam("allowScriptAccess", "always");
widget_so.addVariable("tcolor", "0x333333");
widget_so.addVariable("tspeed", "220");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "'
.urlencode($ftags).'");
widget_so.write("tags");
</script>
</div>'
;
?>

Там аккуратнее с путями не запутайтесь!!! Путь к подключаемому JS скрипту (swfobject.js) и путь к swf файлу (tagcloud.swf). Сейчас там стоят пути к дериктории вашего шаблона ('. base_path() . path_to_theme() .'/), если положить эти файлы туда, то все будет работать.

Данное облако я реализовал на последнем своем сайте о CSS и верстке.
Подробнее Почитать о параметрах плагина можно на моем блоге, там же есть пример и исходники.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Обухов Никита в пн, 29/09/2008 - 14:41.

Спасибо большое, очень полезно!


Опубликовано oblivion в пн, 29/09/2008 - 15:09.

выглядит впечатляюще. только вот если слишком много тегов то немного путаница наступает. а так спасибо.


Опубликовано volocuga в пн, 29/09/2008 - 17:10.

поисковый бот по таким тегам не пойдёт :(


Опубликовано Valeratal в пн, 29/09/2008 - 17:39.

спасибо
хотя облака ли это или туман из мультика "Ежик в тумане" :)


Опубликовано Kremenetskiy в пн, 29/09/2008 - 17:40.

Спасибо! Я создал новый блок и вставил туда PHP-код, отлично работает!

У меня такой вопрос: а как сделать так, чтобы в этом облаке тегов выводились только те тэги, которые указаны в нодах (раньше без этого модуля с одним tagadelic так и было)? А сейчас выводятся все тэги, которые есть в словаре таксономии, и те что используются в нодах и те, что пока не используются.


Опубликовано Kremenetskiy в пн, 29/09/2008 - 17:46.

По Флэш и Ява не пойдут, но тут, как я понял, если Флэш и Ява в браузере нет, то выводится обычный текстовый Tagadelic, для людей так, может и для ботов тоже?


Опубликовано EllECTRONC в пн, 29/09/2008 - 17:52.

Забавная штука! :)


Опубликовано gorr в пн, 29/09/2008 - 19:23.

Симпатично, только не так-то просто их поймать:-))))


Опубликовано Wincert в пн, 29/09/2008 - 19:26.

AntonTau я тоже думаю, даже уверен в этом на 99% что поисковый бот увидит обычный Tagadelic, то есть просто ссылки. Так что на СЕО эффект флеш и JS никак не повлияют.

"AntonTau" написал(а):

а как сделать так, чтобы в этом облаке тегов выводились только те тэги, которые указаны в нодах (раньше без этого модуля с одним tagadelic так и было)?

Надо в SQL запросе правельное условие сделать, точнее сазать не могу т.к. не знаю по каким критериям там отбирается. Или же сделать отдельный словарь для тегов которые хотите выводить в облаке.


Опубликовано Roman Harlamov в пн, 29/09/2008 - 19:27.

Спасибо, будем тестить...


Опубликовано Wave в пн, 29/09/2008 - 22:05.

Глянул на тот пример: жутко неудобно. Пока нужный тег рассмотришь, потом пока его поймаешь...


Опубликовано Ainur в пн, 29/09/2008 - 22:42.

Рекомендую ссылки делать через l();


Опубликовано Barcelona в вт, 30/09/2008 - 07:43.

А как сделать фон прозрачным?


Опубликовано Wincert в вт, 30/09/2008 - 07:58.

"Ainur" написал(а):

Рекомендую ссылки делать через l();

Прошу прощения, непонял.

"Barcelona" написал(а):

А как сделать фон прозрачным?

Думаю не как. Только определенный цвет можно указать.

"Wave" написал(а):

Глянул на тот пример: жутко неудобно. Пока нужный тег рассмотришь, потом пока его поймаешь...

Надо тренироваться почаще ).


Опубликовано VladSavitsky в вт, 30/09/2008 - 09:19.

Эффектно и ново - согласен.
С точки зрения юзабилити - неудобно.
При большом количестве тегов - каша.
При отключенном флеше ничего не выводится, а значит для поисковиков эти теги не видны. Утрачивается одна из основных фишек облака тегов - перелинковка на сайте.
Если бы при отключенном JS или флеше выводить обычные теги,
и автоматом увеличивать поле в зависимости от количества тегов, то было бы удобнее.


Опубликовано Ainur в вт, 30/09/2008 - 11:41.

Гламурненькая штучка, только на моем сайте, она повесила мне браузер, очевидно из-за большого количества тегов.

"Wincert" написал(а):

Прошу прощения, непонял.

Про l() имелось в виду, делать так: $ftags .= l($node->name, '/taxonomy/term/' . $node-> tid);


Опубликовано Kremenetskiy в вт, 30/09/2008 - 11:50.

Спасибо! В SQL я пока новичок совсем.. проще сделать отдельный словарь.


Опубликовано Kremenetskiy в вт, 30/09/2008 - 11:55.

Ainur написал(а):

...делать так: $ftags .= l($node->name, '/taxonomy/term/' . $node-> tid);

А что это даёт?

Да, такое облако выводит все тэги из словаря, и если их много, то, вот даже может браузер повесить. Наверное эта фишка с облаком только для некоторых (избранных тэгов), именно, как фишка.


Опубликовано Ainur в вт, 30/09/2008 - 12:08.

"AntonTau" написал(а):

А что это даёт?

это формирует правильную друпаловую ссылку, если для термина /taxonomy/term/1 есть алияс, то это выдаст алияс, а не /taxonomy/term/1


Опубликовано Wincert в вт, 30/09/2008 - 14:31.

"VladSavitsky" написал(а):

При отключенном флеше ничего не выводится, а значит для поисковиков эти теги не видны. Утрачивается одна из основных фишек облака тегов - перелинковка на сайте.

Вы уверены в этом? Почитайте повнимательней, я очень долго тестировал это облако тегов. Мои тесты показывают что при отключении флеш или JS выводится обычное облако тегов.


Опубликовано VladSavitsky в вт, 30/09/2008 - 19:05.

"Wincert" написал(а):

Вы уверены в этом? Почитайте повнимательней, я очень долго тестировал это облако тегов. Мои тесты показывают что при отключении флеш или JS выводится обычное облако тегов.

Уверен. Специально смотрел в 2х браузерах. В ФФ у меня стоит флеш, а в опере его нет. В опере я на обоих сайтах вижу серый прямоугольник.
Может быть проверяется наличие и JS и флеша одновременно? У меня был отключен только флеш, а JS включен.


Опубликовано Wincert в ср, 01/10/2008 - 10:34.

"VladSavitsky" написал(а):

Уверен. Специально смотрел в 2х браузерах. В ФФ у меня стоит флеш, а в опере его нет. В опере я на обоих сайтах вижу серый прямоугольник.
Может быть проверяется наличие и JS и флеша одновременно? У меня был отключен только флеш, а JS включен.

Насколько я знаю флеш устанавливается не для каждого браузера в отдельности, а для системы в целом и браузеры уже используют его если он есть.
Что касается этого облака, там нет никаких проверок на флеш и JS, там все гораздо проще. В слой id="tags" мы выводим обычное облако тегов, а дальше срабатывает JS который пытается вывести "опупительное облако" и если по каким то причинам "опупительное облако" вывести не удается (нет флеша или выключен JS), то остается обычное облако тегов которое было выведенно изначально.
Я тестирую, у меня все впорядке, выводится или "опупительное облако" или обычное облако tagadelic.


Опубликовано VladSavitsky в ср, 01/10/2008 - 15:36.

"Wincert" написал(а):

Насколько я знаю флеш устанавливается не для каждого браузера в отдельности, а для системы в целом и браузеры уже используют его если он есть.

В винде может быть это и так - уже и не помню. Я в Линуксе и у меня каждый браузер живет своей жизнью. Я меня это устраивает.

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


Опубликовано VladSavitsky в ср, 01/10/2008 - 15:54.

Флеш  JS  Результат
да    нет обычное
да    да  опупительное
нет   да  ничего
нет   нет обычное


Опубликовано Wincert в ср, 01/10/2008 - 17:01.

Вот если только в Opere такая трабла, то я кажется знаю как ее разрешить. А если в FF и в IE, то там уже сложнее будет, а может и вообще нереально.


Опубликовано Kremenetskiy в ср, 01/10/2008 - 18:05.

Может быть возможно написать код, чтобы браузер к этому облаку не хотел подключать флэш, если его нету в системе?


Опубликовано VladSavitsky в ср, 01/10/2008 - 18:40.

Я так понимаю, что переключением между флеш-облаком и обычным заведует JS.
Нужно научить его проверять наличие в браузере возможности показывать флеш.


Опубликовано VladSavitsky в ср, 01/10/2008 - 20:04.

Вот нашел пару ссылок по определению флеша:


Опубликовано pluser в ср, 01/10/2008 - 21:21.

Жесть :-)
Я попробовал на свои 200 тегов и мой сафари чуть чуть не сдох.


Опубликовано Wincert в чт, 02/10/2008 - 14:47.

Ковырял недавно тему флешдетектора, кроссбраузерного решения так и не нашел. Нормальный флешдетектор получается только для опреы и ему подобных. Может как нибудь еще поковыряю, как время будет.


Опубликовано Drugan в сб, 04/10/2008 - 08:24.

Скрестил вот с этим сниппетом. Получилось довольно неплохо - выводятся только использованные термины плюс размер отображения по весу.


Опубликовано Kremenetskiy в сб, 04/10/2008 - 16:55.

Drugan, просветите, пожалуйста, как скрестили. Я пока только html и css умею скрещивать..


Опубликовано Drugan в вс, 05/10/2008 - 15:29.

Я в php не силен. Можно, наверное, как-то получше это сделать. Вероятно тут даже и без tagadelic можно обойтись. У меня вот, что получилось:

<?php
$max_fontsize = 25; // Размер шрифта для тэга с максимальным весом
$min_fontsize = 8;  // Размер шрифта для тэга с минимальным весом
$metrics = 'pt';      // в чем измеряется размер px,pt,em,%
$voc = 5;            // 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 "),$voc);
$ftags = "<tags>";
while($term = db_fetch_object($result)) {
 $size = $min_fontsize + ($term->cnt - $min_weight) * $font_metric_koof;
 $style = 'font-size: '.$size.$metrics.';'; 
 $ftags .= l($term->name,'taxonomy/term/'.$term->tid,
   array('attributes' => array('style' => $style,'class' => 'tags-voc-'.$voc))).' ';
} 
 
$ftags .= "</tags>";
 
//получаем теги выводимые с помощью модуля tagadelic (будет выводиться если у пользователя не установлен FlashPlayer или не включен JS в браузере)
        $vocs = array(5); //Список словарей 
        $tags = tagadelic_get_weighted_tags($vocs, 6, 20);
        $tags = tagadelic_sort_tags($tags);
        $output = theme('tagadelic_weighted',$tags);
 
echo '<div id="tags">
'. $output .'
<script type="text/javascript" src="'. base_path() . path_to_theme() .'/swfobject.js"></script>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("'. base_path() . path_to_theme() .'/tagcloud.swf?r="+rnumber, "tagcloudflash", "200", "200", "9", "#f1f1f1");
widget_so.addParam("allowScriptAccess", "always");
widget_so.addVariable("tcolor", "3350237");
widget_so.addVariable("tspeed", "120");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "'.urlencode($ftags).'");
widget_so.write("tags");
</script>
</div>';
?>


Опубликовано VladSavitsky в пн, 06/10/2008 - 07:46.

Конечно можно - этот сниппет заменяет блок, который создает модуль tagadelic.


Опубликовано Drugan в пн, 06/10/2008 - 10:12.

Только вот бы еще можно было ограничивать количество выводимых тэгов...


Опубликовано VladSavitsky в пн, 06/10/2008 - 12:26.

"Drugan" написал(а):

Только вот бы еще можно было ограничивать количество выводимых тэгов...

В sql-запросе добавьте в конце "LIMIT 0, $max"
где $max - нужное максимальное количество тегов.


Опубликовано Kremenetskiy в пн, 06/10/2008 - 13:54.

Теги теперь вообще не выводятся... по крайней мере у меня.


Опубликовано VladSavitsky в пн, 06/10/2008 - 16:55.

А что вы меняли?


Опубликовано Kremenetskiy в пн, 06/10/2008 - 19:36.

Ввел в блок код, как предложил Drugan, ничего не меняя.

Первоначальный код теги выводил.


Опубликовано Drugan в вт, 07/10/2008 - 05:59.

$voc = 5; // vid словаря
$vocs = array(5); //Список словарей
Здесь нужно свой словарь указать, может в этом дело?


Опубликовано Drugan в вт, 07/10/2008 - 06:02.

VladSavitsky написал(а):

В sql-запросе добавьте в конце "LIMIT 0, $max"
где $max - нужное максимальное количество тегов.

В этом случае будет просто ограничиваться их количество или останутся теги, встречающиеся наиболее часто в нодах?


Опубликовано a.mohax в вт, 07/10/2008 - 06:07.

Пока флэш не доконца згрузился, показывает теги первого словаря, а как только загрузиться отображает те теги, номер словоря которого я указал в настройках снипета.

Тока заметил массив с используемыми словарями, попробую его тоже поменять :)


Опубликовано olk в вт, 07/10/2008 - 08:42.

Интересно, а случайно у этого SWF объекта нет параметра что нибудь типа font-family ?
Ну и проверил со своим сниппетом :) вроде работает (при этом модуль tagadelic не нужен)


<?php
$max_fontsize 
18;  // Размер шрифта для тэга с максимальным весом
$min_fontsize 9;   // Размер шрифта для тэга с минимальным весом
$metrics 'pt';     // в чем измеряется размер px,pt,em, (с установкой в процентном отношении Flash  облоко глючит )  
$voc = array(3);     // массив (vid) словарей
$max_tags 20;      // максимальное количество показываемых тэгов
$width_swf 160;    // ширина и высота  SWF объекта
$height_swf 160;
$bgcolor_swf '#ffffff'// Цвет фона SWF объекта
$color_swf   '0x226688';// Цвет шрифта SWF объекта
$speed_swf   '100';     // Ну видимо скорость вращения облака

$vocs implode(',',$voc);
$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 IN ("
.$vocs.")"));
$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_range(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 IN ("
.$vocs.") ORDER BY n.cnt DESC"),0,$max_tags);
$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)) {
$tags='<tags class="voc-'.$voc.'">'.$tags.'</tags>';
$output='<div id="tags">'.$tags.'
<script type="text/javascript" src="'
base_path() . path_to_theme() .'/swfobject.js"></script>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("'
base_path() . path_to_theme() .'/tagcloud.swf?r="+rnumber, "tagcloudflash", "'.$width_swf.'", "'.$height_swf.'", "9", "'.$bgcolor_swf.'");
widget_so.addParam("allowScriptAccess", "always");
widget_so.addVariable("tcolor", "'
.$color_swf.'");
widget_so.addVariable("tspeed", "'
.$speed_swf.'");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "'
.urlencode($tags).'");
widget_so.write("tags");
</script>
</div>'
;
echo 
$output;
}
}
?>


Опубликовано Kremenetskiy в вт, 07/10/2008 - 10:03.

Спасибо. Да, видимо я в настройках промазал.


Опубликовано Kremenetskiy в вт, 07/10/2008 - 11:09.

$voc = array(3); - это настройки словаря, кодгда 3 стояло, то блок не выводился, поставил 1, блок появился, но вместо тегов текст ошибки:

"Parse error: parse error, unexpected '}' in /home/russerv6/public_html/includes/common.inc(1347) : eval()'d code on line 59"

Внизу кода вроде лишняя закрывающая скобка, убрал ее, блок пустой, в админке вывод:

"warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/russerv6/public_html/includes/bootstrap.inc on line 631."

Видимо еще что-то лишнее стоит?


Опубликовано Kremenetskiy в вт, 07/10/2008 - 11:20.

Поставил $voc = 1; и $vocs = array(1); - как и было в первый раз, когда всё работало.

блок пустой и в админке текст ошибки:

"warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/russerv6/public_html/includes/bootstrap.inc on line 631."


Опубликовано Kremenetskiy в вт, 07/10/2008 - 11:23.

Нет, блок не пустой, там один ооочень, аж почти не видно, маленький тег плавает.. :))


Опубликовано olk в вт, 07/10/2008 - 12:11.

$voc = array(3); да это номер словаря (может быть несколько), например $voc = array(1,2,3);
Ошибка есть :) забыл что я теги темизирую (назначаю класс) через номер словоря , ну и лишняя скобка в концe } исправленная версия ниже:

<?php
$max_fontsize = 18;  // Размер шрифта для тэга с максимальным весом
$min_fontsize = 9;   // Размер шрифта для тэга с минимальным весом
$metrics = 'pt';     // в чем измеряется размер px,pt,em, (с установкой в процентном отношении Flash  облоко глючит )  
$voc = array(3);     // массив (vid) словарей
$max_tags = 20;      // максимальное количество показываемых тэгов
$width_swf = 160;    // ширина и высота  SWF объекта
$height_swf = 160;
$bgcolor_swf = '#ffffff'; // Цвет фона SWF объекта
$color_swf   = '0x226688';// Цвет шрифта SWF объекта
$speed_swf   = '100';     // Ну видимо скорость вращения облака
 
$vocs = implode(',',$voc);
$class_voc = implode('-',$voc);
$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 IN (".$vocs.")"));
$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_range(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 IN (".$vocs.") ORDER BY n.cnt DESC"),0,$max_tags);
$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-'.$class_voc))).' ';
} 
if (!empty($tags)) {
$tags='<tags class="voc-'.$class_voc.'">'.$tags.'</tags>';
$output='<div id="tags">'.$tags.'
<script type="text/javascript" src="'. base_path() . path_to_theme() .'/swfobject.js"></script>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("'. base_path() . path_to_theme() .'/tagcloud.swf?r="+rnumber, "tagcloudflash", "'.$width_swf.'", "'.$height_swf.'", "9", "'.$bgcolor_swf.'");
widget_so.addParam("allowScriptAccess", "always");
widget_so.addVariable("tcolor", "'.$color_swf.'");
widget_so.addVariable("tspeed", "'.$speed_swf.'");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "'.urlencode($tags).'");
widget_so.write("tags");
</script>
</div>';
echo $output;
}
?>


Опубликовано Kremenetskiy в вт, 07/10/2008 - 11:46.

Пока сделал так:

<?php
$max_fontsize = 20;  // Размер шрифта для тэга с максимальным весом
$min_fontsize = 10;   // Размер шрифта для тэга с минимальным весом
$metrics = 'pt';     // в чем измеряется размер px,pt,em, (с установкой в процентном отношении Flash  облоко глючит )  
$max_tags = 10;      // максимальное количество показываемых тэгов
 
//Указываем ID словаря из которого будем выводить теги
$slovar = "1";
 
//Запрос для вывода тегов 
$query = "SELECT DISTINCT t.name, t.tid
  FROM {term_data} t
WHERE t.vid = $slovar";
 
//получаем результат запроса
$sql = db_rewrite_sql($query);
$result = db_query($sql);
 
//формируем теги для вывода в облаке
$ftags = "<tags>";
while ($node = db_fetch_object($result)) {
    $ftags .= '<a href="/taxonomy/term/'.$node-> tid.'" style="font-size: 10pt">'.$node-> name.'</a>';
}
$ftags .= "</tags>";
 
//получаем теги выводимые с помощью модуля tagadelic (будет выводиться если у пользователя не установлен FlashPlayer или не включен JS в браузере)
        $vocs = array(1); //Список словарей 
        $tags = tagadelic_get_weighted_tags($vocs, 6, 20);
        $tags = tagadelic_sort_tags($tags);
        $output = theme('tagadelic_weighted',$tags);
 
echo '<div id="tags">
'. $output .'
<script type="text/javascript" src="'. base_path() . path_to_theme() .'/swfobject.js"></script>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("'. base_path() . path_to_theme() .'/tagcloud.swf?r="+rnumber, "tagcloudflash", "230", "170", "9", "#eaeaea");
widget_so.addParam("allowScriptAccess", "always");
widget_so.addVariable("tcolor", "0x333333");
widget_so.addVariable("tspeed", "220");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "'.urlencode($ftags).'");
widget_so.write("tags");
</script>
</div>';
?>

Чуть лучше, облако от тегов не ломится. Пока обхожусь отдельным словарем в котором только те теги, что использованы в нодах.


Опубликовано Kremenetskiy в вт, 07/10/2008 - 12:36.

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


Новое на сайте