Думаю многие уже видели плагин для вордпресса 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 = "";
while ($node = db_fetch_object($result)) {
$ftags .= ' tid.'" style="font-size: 10pt">'.$node-> name.'';
}
$ftags .= "";
//получаем теги выводимые с помощью модуля 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 '
';
?>
Там аккуратнее с путями не запутайтесь!!! Путь к подключаемому JS скрипту (swfobject.js) и путь к swf файлу (tagcloud.swf). Сейчас там стоят пути к дериктории вашего шаблона ('. base_path() . path_to_theme() .'/), если положить эти файлы туда, то все будет работать.
Данное облако я реализовал на последнем своем сайте о CSS и верстке.
Подробнее Почитать о параметрах плагина можно на моем блоге, там же есть пример и исходники.
Комментарии
Спасибо большое, очень полезно!
выглядит впечатляюще. только вот если слишком много тегов то немного путаница наступает. а так спасибо.
поисковый бот по таким тегам не пойдёт
По Флэш и Ява не пойдут, но тут, как я понял, если Флэш и Ява в браузере нет, то выводится обычный текстовый Tagadelic, для людей так, может и для ботов тоже?
спасибо
хотя облака ли это или туман из мультика "Ежик в тумане"
Спасибо! Я создал новый блок и вставил туда PHP-код, отлично работает!
У меня такой вопрос: а как сделать так, чтобы в этом облаке тегов выводились только те тэги, которые указаны в нодах (раньше без этого модуля с одним tagadelic так и было)? А сейчас выводятся все тэги, которые есть в словаре таксономии, и те что используются в нодах и те, что пока не используются.
Забавная штука!
Симпатично, только не так-то просто их поймать:-))))
AntonTau я тоже думаю, даже уверен в этом на 99% что поисковый бот увидит обычный Tagadelic, то есть просто ссылки. Так что на СЕО эффект флеш и JS никак не повлияют.
Надо в SQL запросе правельное условие сделать, точнее сазать не могу т.к. не знаю по каким критериям там отбирается. Или же сделать отдельный словарь для тегов которые хотите выводить в облаке.
Спасибо! В SQL я пока новичок совсем.. проще сделать отдельный словарь.
Спасибо, будем тестить...
Глянул на тот пример: жутко неудобно. Пока нужный тег рассмотришь, потом пока его поймаешь...
Рекомендую ссылки делать через l();
А как сделать фон прозрачным?
Прошу прощения, непонял.
Думаю не как. Только определенный цвет можно указать.
Надо тренироваться почаще ).
Эффектно и ново - согласен.
С точки зрения юзабилити - неудобно.
При большом количестве тегов - каша.
При отключенном флеше ничего не выводится, а значит для поисковиков эти теги не видны. Утрачивается одна из основных фишек облака тегов - перелинковка на сайте.
Если бы при отключенном JS или флеше выводить обычные теги,
и автоматом увеличивать поле в зависимости от количества тегов, то было бы удобнее.
Гламурненькая штучка, только на моем сайте, она повесила мне браузер, очевидно из-за большого количества тегов.
Про l() имелось в виду, делать так: $ftags .= l($node->name, '/taxonomy/term/' . $node-> tid);
А что это даёт?
Да, такое облако выводит все тэги из словаря, и если их много, то, вот даже может браузер повесить. Наверное эта фишка с облаком только для некоторых (избранных тэгов), именно, как фишка.
это формирует правильную друпаловую ссылку, если для термина /taxonomy/term/1 есть алияс, то это выдаст алияс, а не /taxonomy/term/1
Вы уверены в этом? Почитайте повнимательней, я очень долго тестировал это облако тегов. Мои тесты показывают что при отключении флеш или JS выводится обычное облако тегов.
Уверен. Специально смотрел в 2х браузерах. В ФФ у меня стоит флеш, а в опере его нет. В опере я на обоих сайтах вижу серый прямоугольник.
Может быть проверяется наличие и JS и флеша одновременно? У меня был отключен только флеш, а JS включен.
Насколько я знаю флеш устанавливается не для каждого браузера в отдельности, а для системы в целом и браузеры уже используют его если он есть.
Что касается этого облака, там нет никаких проверок на флеш и JS, там все гораздо проще. В слой id="tags" мы выводим обычное облако тегов, а дальше срабатывает JS который пытается вывести "опупительное облако" и если по каким то причинам "опупительное облако" вывести не удается (нет флеша или выключен JS), то остается обычное облако тегов которое было выведенно изначально.
Я тестирую, у меня все впорядке, выводится или "опупительное облако" или обычное облако tagadelic.
В винде может быть это и так - уже и не помню. Я в Линуксе и у меня каждый браузер живет своей жизнью. Я меня это устраивает.
Возможно, js отрабатывает (у меня он включен) и выводит опупительное облако поверх обычного и я его не вижу. Вот скриншот:
Флеш JS Результат
да нет обычное
да да опупительное
нет да ничего
нет нет обычное
Вот если только в Opere такая трабла, то я кажется знаю как ее разрешить. А если в FF и в IE, то там уже сложнее будет, а может и вообще нереально.
Может быть возможно написать код, чтобы браузер к этому облаку не хотел подключать флэш, если его нету в системе?
Я так понимаю, что переключением между флеш-облаком и обычным заведует JS.
Нужно научить его проверять наличие в браузере возможности показывать флеш.
Вот нашел пару ссылок по определению флеша:
Жесть
Я попробовал на свои 200 тегов и мой сафари чуть чуть не сдох.
Ковырял недавно тему флешдетектора, кроссбраузерного решения так и не нашел. Нормальный флешдетектор получается только для опреы и ему подобных. Может как нибудь еще поковыряю, как время будет.
Скрестил вот с этим сниппетом. Получилось довольно неплохо - выводятся только использованные термины плюс размер отображения по весу.
Drugan, просветите, пожалуйста, как скрестили. Я пока только html и css умею скрещивать..
Я в php не силен. Можно, наверное, как-то получше это сделать. Вероятно тут даже и без tagadelic можно обойтись. У меня вот, что получилось:
$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>';
?>
Теги теперь вообще не выводятся... по крайней мере у меня.
Конечно можно - этот сниппет заменяет блок, который создает модуль tagadelic.
Только вот бы еще можно было ограничивать количество выводимых тэгов...
В sql-запросе добавьте в конце "LIMIT 0, $max"
где $max - нужное максимальное количество тегов.
В этом случае будет просто ограничиваться их количество или останутся теги, встречающиеся наиболее часто в нодах?
А что вы меняли?
Ввел в блок код, как предложил Drugan, ничего не меняя.
Первоначальный код теги выводил.
$voc = 5; // vid словаря
$vocs = array(5); //Список словарей
Здесь нужно свой словарь указать, может в этом дело?
Спасибо. Да, видимо я в настройках промазал.
Поставил $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."
Нет, блок не пустой, там один ооочень, аж почти не видно, маленький тег плавает..
Пока флэш не доконца згрузился, показывает теги первого словаря, а как только загрузиться отображает те теги, номер словоря которого я указал в настройках снипета.
Тока заметил массив с используемыми словарями, попробую его тоже поменять
Интересно, а случайно у этого 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;
}
}
?>
$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."
Видимо еще что-то лишнее стоит?
$voc = array(3); да это номер словаря (может быть несколько), например $voc = array(1,2,3);
Ошибка есть забыл что я теги темизирую (назначаю класс) через номер словоря , ну и лишняя скобка в концe } исправленная версия ниже:
$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;
}
?>
Опять та же самая ошибка в админке.. видимо код заточен под Ваши настройки системы... я пока не могу разобраться в чем дело..
Пока сделал так:
$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>';
?>
Чуть лучше, облако от тегов не ломится. Пока обхожусь отдельным словарем в котором только те теги, что использованы в нодах.
А для 5 друпала никто не переделывал?
Никто не пробовал выводить вместо текста картинки? Это конечно глобально меняет назначение такого облака, но может оказаться вариант интересный..
А почему бы и нет, ведь есть taxonomy_image, который каждому тегу ставит в соответствие картинку, теперь осталось пустить их летать:)
Даже так можно.. Я все больше склоняюсь, что "Опупительное облако тегов" - это не просто облако тегов (функционал), а скорее эдакая "изюминка" сайта.
можно сначала выводить простой блок с тегами, а потом закрашивать его с помощью SWFObject.js.
тогда если не тфлеша, то останется простой блок
Интересно все же под друпал 5 заставить работать...
На пятом Друпале работает, я проверял, но только с оригинальным кодом. Пробывал со всеми нововведениями - не работает. Т. е. на пятом Друпале пока так: вывод всех тегов, и если не хочется браузер вешать из-за того, что тегов слишком много, то надо создавать отдельный словарь специально для "опупительного облака тегов"
Я подумал, а если превратить "опупительное облако" в primry links?
Можно "не настоящее" primry links, т. е. завести отдельный словарь с тегами Главная, О нас, Портфолио и т. п., привязать эти теги к соответствующим материалам и вывести словарь в "опупительном облаке" Ну такое primary, возможно, не на всех страницах, а только на главной. Но тогда вопрос, а зачем эти спец теги будут висеть в нодах по всем остальным URL? Не зачем.
Вопрос: а можно ли в "опупительное облако" встроить настоящее primary links для вывода, опять же, отдельным блоком?
Wincert, я решил сделать, как показано в Вашем блоге http://w-blog.ru/node/22 (вставил код на страницу Т. е. чтобы не теги, а любые ссылки выводились.
Если отрубить сниппет (блок) с кодом приведенном в данной теме "Опупмиельное облако тегов", то на странице с кодом, приведенном в Вашем блоге, вообще ничего не выводится, только сам пустой Flash объект. А если сниппет оставить, то на странице выводятся все теги таксономии, но не ссылки.
Я создал файл .php с кодом из Вашего блога, кинул в корень .js и .swf и все работает. Подскажите, пожалуйста, как сделать так, чтобы на странице Друпала было так же? Т. е. ссылки, а не теги из таксономии.
Разобрался... правильный путь до .js и .swf надо поставить. Положил .js и .swf в корень и прописал абсолютные пути до них
Вот такой код:
<div id="tags">
<?php
$tags = '<tags>
<a href="http://mysite.com/about" style="font-size: 15pt">Обо мне</a>
<a href="http://mysite.com/prtfolio" style="font-size: 15pt">Портфолио</a>
<a href="http://mysite.com/blog" style="font-size: 15pt">Блог</a>
<a href="http://mysite.com/download" style="font-size: 15pt">Скачать</a>
<a href="http://mysite.com/contact" style="font-size: 15pt">Контакты</a>
<a href="http://mysite.com/glossary" style="font-size: 15pt">Глоссарий</a>
</tags>';
?>
<script type="text/javascript">
var rnumber = Math.floor(Math.random()*9999999);
var widget_so = new SWFObject("http://mysite.com/tagcloud.swf?r="+rnumber, "tagcloudflash", "230", "140", "9", "#eaeaea");
widget_so.addParam("allowScriptAccess", "always");widget_so.addVariable("tcolor", "0x333333");
widget_so.addVariable("tspeed", "115");
widget_so.addVariable("distr", "true");
widget_so.addVariable("mode", "tags");
widget_so.addVariable("tagcloud", "<?php echo urlencode($tags); ?>");
widget_so.write("tags");</script>
</div>
Приветствую вас читатели и веб девлоперы!
Я рад что вам понраволсь облако и спасибо за проявленый интерес. К сожалению у меня не всегда есть возможнось отчечать, но по возможности буду это делать. Если вы знаете или видели еще какие-нибудь фишки на сайтах, пишите, я по возможности займусь ими и привинчу к друпалу. Контакты в профиле.
Почему сниппет выводит картинку с терминами только на странице admin/content/taxonomy, т.е. запрос к таблице
FROM {term_data}t
WHERE t.vid = $slovar";
работает только на этой странице. На остальных запрос возвращает пустой результат.
Странно, у меня этот сниппет работал и в блоках и в нодах
А могут быть какие-нибудь ограничения на доступ к таблицам базы из разных нодов или блоков? Такое впечатление, что у меня доступ к таблице возможен, если в этом ноде уже обращение было.
Не могу сказать, я в пятом Друпале создавал новый блок и вставил туда тот код, что в посте этой темы без изменений, и всё работало, только вот плохо, что все тэги собираются, и которые в нодах использованы и которые нигде не использованы.
А еще выше есть код, который можно для простых ссылок использовать, вот этот, думаю, вообще куда угодно можно вставлять, я его и в блоки и в ноды вставлял, и даже просто без Друпала он работает в файле .php. Т. е. соответственно без базы данных.
Та же проблема: маленький тег и ошибка.
warning: htmlspecialchars() expects parameter 1 to be string, array given in /var/www/virtual/*****/drupal-5.3/includes/bootstrap.inc on line 631.
Пути прописаны до файлов.
Как заметили друпал 5-й.
Изначальный код выдаёт ошибку связанную с названием таблиц при селекте.
Используется i18n.
В пятом Друпале работает только код, который в самом посте без изменений, потом в комментах идет измененный код, вот измененный в пятом не работает.
В пятом еще работает код для простых ссылок, что я выше приводил, этот можно куда угодно вставлять, где PHP разрешено.
А можно уточнить, какой именно из них работает на 5ке. А то их тут столько уже кодов. Заранее спасибо.
При использовании кода в изначальном посте выдаёт ошибку:
user warning: Unknown column 'n.nid' in 'on clause' query: SELECT DISTINCT t.name, t.tid FROM term_data t LEFT JOIN i18n_node i18n ON n.nid = i18n.nid WHERE (i18n.language ='ru' OR i18n.language ='' OR i18n.language IS NULL) AND ( t.vid = 1) in /var/www/virtual/*****/drupal-5.3/includes/database.mysql.inc on line 172.
решил
Да, тот,что в изначальном посте на пятерке точно работает.
i18n добавляет в запрос свои условия. Я отключил мультиязычность, но не помогло, т.к. в запрос добавляется проверка прав пользователя:
это для обычного пользователя, а для админа ничего не меняется:
Как обойти эту проверку, т.е. возможен ли альтернативный метод доступа к таблице?
Я в БД не силен, могу только сказать, что сначала попробуйте всё локально, например на Денвере, а потом залейте на тот хостинг, где все будет работать еще лучше, чем локально, без ограничений. А у Вас там доступ к БД вообще есть, к PHP MyAdmin ?
вопрос:
как сделать данный флеш-обьект из ссылок на обычные страницы сайта (новости, статьи, блоги, календарь и т п), то есть получится аналог главного меню
Смотрите мои ранние комменты: можно сделать вместо тегов простые ссылки и, видимо, вместо тегов сделать меню.
Здравствуйте!
Помогите пожалуйста!!!!
Офигенно понравился сниппет. Я его вставил в друпал на локалке (под денвером) и все работает. Когда перенес сайт на сервак (мастерхост), то в версии 6.6 все работало тоже, но были другие глюки.
Обновил версию до 6.9 и заодно обновилось ПО с php4 до php5, из-за чего друпал стал выдавать ошибку про временную папку. Но облако тегов работало.
Исправленно тем, что в настройках друпала (файловая система) указана временная папка не /tmp, а:
/home/uномер_площадки/nashko.ru/tmp
И я так понимаю, именно после этого у меня перестало работать облако тегов 3Д. Других существенных изменений я не проводил.
Перестало работать - это вместо самого облака выводится часть пхп-кода сниппета :(((
Посмотреть можено тут http://nashko.ru/ - в левой колонке сразу видно.
Не понимаю в чем дело, где ковырять?
Буду рад любой помощи.
Прикольно было-бы вместо текста выводить картинки (например лица, лейбы компаний, и т.д.)
Народ, а чем этот сниппет приемущественно отличается от модуля Cumulus?
Тем, что JS завернули в виде модуля.
а можно ли сделать флеш-облако навигации? чтобы пункты ссылались на Страницу, т.е. без таксономии.
я попробовал привязать к нужным страницам по тегу и вывести их в облаке, но когда нажимаешь на тег в облаке - выводится страница с тизерами всех документов связаных с этим тегом, а мне надо шобы не тизеры были а полный текст, сделать с этим ничего не смог поэтому и задал вопрос
Почитал посты AntonTau, но всё равно не понял, как реализовать прямые ссылки на ноды из облака.
...
Всё. Разобрался. Но вариант обходной.
Вот тут подробная инструкция http://w-blog.ru/node/22 как можно разместить облако со ссылками в ноде. Как и писал AntonTau, файлф js и swf надо кинуть в корень сайта. Прописал не в head, а прямо в содержимое перед
Но остался вопрос, как сделать прямые ссылки из облака использую словарь таксономии минуя анонсы.
Можно. Почитайте внимательно о настройках облака. Если не здесь, то в других сайтах.
Уже вижу эти флеш-облака приобрели характер эпидемии-вижу на многих сайтах.И чё народ на эту гадость ведётся?
Явление временное, заставляющее создать нечто лучшее и удобное!!!
а можно ли использовать tcolor2 и hicolor для раскраски облака и если да то как?
У меня выдает ошибку (предпоследний код):
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(n.nid)) as cnt FROM drupal_term_node tn INNER JOIN drupal_node n ON n' at line 3 query: SELECT max(cnt) AS maxcnt,min(cnt) AS mincnt FROM drupal_term_data td INNER JOIN (SELECT tn.tid,COUNT(t DISTINCT(n.nid)) as cnt FROM drupal_term_node tn INNER JOIN drupal_node n ON n.nid=tn.nid GROUP BY tn.tid) n ON n.tid=td.tid AND td.vid IN (3,6) in /home/kiron/public_html/vko/includes/common.inc(1655) : eval()'d code on line 19.
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(n.nid)) as cnt FROM drupal_term_node tn INNER JOIN drupal_node n ON n' at line 3 query: SELECT td.tid,td.name,n.cnt FROM drupal_term_data td INNER JOIN (SELECT tn.tid,COUNT(t DISTINCT(n.nid)) as cnt FROM drupal_term_node tn INNER JOIN drupal_node n ON n.nid=tn.nid GROUP BY tn.tid) n ON n.tid=td.tid AND td.vid IN (3,6) ORDER BY n.cnt DESC LIMIT 0, 20 in /home/kiron/public_html/vko/includes/common.inc(1655) : eval()'d code on line 34.
Можно сделать такой фон.
Замените строчку widget_so.addParam("allowScriptAccess", "always"); на (или добавить) widget_so.addParam("wmode", "transparent"); и будет вам счастье.
У меня другой вопрос. Возможно очень глупый)). Как сделать, чтобы при наведении текст не обрамлялся в рамку, а изменял свой цвет?
почему-то при включенном модуле pm_lite
облако не пашет и пишет ошибку
user warning: Unknown column 'n.type' in 'where clause' query: SELECT DISTINCT t.name, t.tid FROM shvabra_term_data t WHERE (n.type != 'pm') AND ( t.vid = 1) in V:\home\test1.ru\www\includes\common.inc(1547) : eval()'d code on line 12.
норм сниппет...
cumulus отказался робить, а этот заработал
Создал блок с кодом, пробовал с разными вариантами указания путей, в тч по http
всё равно показывает кукиш и рисует код вместо облака
Народ хэл сниппет уж больно понравился, а в php и sql не силен
друпал последний 6ой ветви, хостинг Инфобокс
Поигрался еще с переменными
резльтат таков
Fatal error: Call to undefined function db_rewrite_sql() in /home/www/z127719/htdocs/gd/cloud.php on line 11
это симуляция - сниппет в отдельном php файле на сервере
Вы б ещё девичью фамилию бабушки дедушки написали, если показывает код, значит php-фильтр не включили
простите дурака, а где его включить? я новичок
нашел и заработало
теперь нужно только фон сменить )
хм, фон сменить получилось, но не получается сменить цвет текста. Пробовал из нарытых в инете CSS таблиц коды белого и синего не помогло, да, цвет фона сделан прозрачным а искомый цвет шрифта желтый или белый. ссылка на сайт http://globaldynamic.ru
странно
попробовал на другой сайт прибить на том же хостинге. Опять рисует код вместо модуля. PHP фильтр включен. Формат выбран PHP код. Вопрос: откуда могут тут расти ноги?
От невыключенного визуального редактора
RxB
пасиба, помогло, только облако отображается пустым - без тэгов, но "будем искать" (с)
Всё еще остается без ответа вопрос почему не меняется цвет текста
тут кажется не хватает параметров у функции db_rewrite_sql.. вообще можно было бы и обойтись без нее, ну раз уж вставили в код - надо бы дописать параметры..
<?php
//получаем результат запроса
$sql = db_rewrite_sql($query, 't', 'tid');
?>
но в 99% случаев можно эту ф-ю не использовать..
p.s.: а вообще для больших таксономий это будет двойная работа.. Проще было было бы затемизировать результат, возвращаемый тагаделиком...
добрый день.
Заметил такой баг (возможно только у меня, но мало ли).
Последний добавленный термин не открывается, а ссылается на "/taxonomy/term"
например, добавляю запись с тэгом "февраль", по февралю ссылка "/taxonomy/term". Потом добавляю запись с тэгом "март" и фераль отображается из облака так "/tegs/klyuchevye-slova/fevral", а март ссылается на "/taxonomy/term"
((
может только у меня такое? что-то где-то блокируется?
просьба потестировать у себя, нет ли таких проблем?
в чем может быть эта проблема и как ее решить?
заранее спасибо!
up!
дублирую вопрос, просьба проверить у себя, у всех баг иль только у меня?
Последний добавленный термин не открывается, а ссылается на "/taxonomy/term"
например, добавляю запись с тэгом "февраль", по февралю ссылка "/taxonomy/term". Потом добавляю запись с тэгом "март" и фераль отображается из облака так "/tegs/klyuchevye-slova/fevral", а март ссылается на "/taxonomy/term"
((
может только у меня такое? что-то где-то блокируется?
просьба потестировать у себя, нет ли таких проблем?
в чем может быть эта проблема и как ее решить?
заранее спасибо!
Подскажите пожалуйста как вывести в облако главное меню $primary_links
дублирую вопрос, просьба проверить у себя, у всех баг иль только у меня?
Последний добавленный термин не открывается, а ссылается на "/taxonomy/term"
например, добавляю запись с тэгом "февраль", по февралю ссылка "/taxonomy/term". Потом добавляю запись с тэгом "март" и фераль отображается из облака так "/tegs/klyuchevye-slova/fevral", а март ссылается на "/taxonomy/term"
((
может только у меня такое? что-то где-то блокируется?
просьба потестировать у себя, нет ли таких проблем?
в чем может быть эта проблема и как ее решить?
заранее спасибо!
Хоть убейте меня, но я не пойму как скачать SWF файл !!!
Открывается страница с серым фоном и всё. Что делать?
Ctrl+S
Так тоже ничего не сохраняется.
Только вот на правой кнопке мыши что есть:
Догнал как сохранять.)))
Установил облако. Работает-крутится.
Но почему-то при нажатии на термин переходит на неправильный адрес.
Должен переходить на мой_сайт.net/папка_с_сайтом/taxonomy/term/2, а переходит на мой_сайт.net/taxonomy/term/2.
Получается что опускается папка с сайтом.
Почему такое может быть?
в начале сниппета вставьте global $base_url;
и замените строку
на
Ну и проверьте правильно-ли прописано $base_url в settings.php
olk , спасибо большое!!! Всё заработало.)))
Только у меня почему то только один термин выводится.( После перезагрузки иногда другой или через раз.
Так у меня их два.
Никто не знает как можно исправить?
друзья, подскажите, как быть с мультиязычностью?
чтобы на русском выводились теги в облаке на русском, а на английском крутилось английское облачко?
заранее спасибо!
Не качается у меня SWF файл!!!
Дайте кто-нибудь, у кого есть! Спасибо заранее.
Всем привет! Сделал все по интрукции с первого поста, создал блок, выбрал PHP code, положил два файла в корень сайта, прописал им абсолютные пути и получаю такую ошибку
Fatal error: Call to undefined function db_rewrite_sql() in /home/navros/k/modules/php/php.module(80) : eval()'d code on line 11
помогите
Кто-то заметил, что выводится на 1 термин меньше, чем есть в словаре!???
В этой строчке последнее использование переменной $ftags.
Она содержит все термины со словаря. Потом один где-то теряется, произвольным образом.
Кто-то заметил, что выводится на 1 термин меньше, чем есть в словаре!???
В этой строчке последнее использование переменной $ftags.
Она содержит все термины со словаря. Потом один где-то теряется, произвольным образом.
я думаю просто мало кто пользуется этой хренью, флеш мертв)