Облако тегов с относительными размерами

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

Не буду запудривать вам мозг азами PHP, и уж тем более не буду учить, как это реализуется на MySQL и иже с ним :) Конкретная реализация - личное дело каждого. Например, в Neutrino Atomic Edition, с моей подачи, теги работают без всякой БД, чисто на текстовых файлах, и, что парадоксально, работают быстрее, чем та же реализация с использованием базы данных, будь то MySQL, PostgreSQL, или что-то другое.

Абстрагируясь от конкретной реализации системы тегов, предположим, что имеется массив, содержащий в себе все вхождения тегов(в том числе и с повторениями). Любую реализацию вполне можно привести к этой схеме, и много процессорного времени данная операция у сервера не отнимет. Итак, код в студию:

<?
	//$tags=array('php','html','php','css','javascript','php','html','php');
	$tags=array_count_values($tags);//$tags=array('php'=>4,'html'=>2,'css'=>1,'javascript'=>1);
	$avg=array_sum($tags)/count($tags);//$avg=8/4;$avg=2;
	foreach($tags as $tag => $num)echo '<span style="font-size:'.($num/$avg).'em;"> <a href="/tags/'.urlencode($tag).'/">'.$tag.'</a> </span>';
?>

Всего 3 строчки кода превращают массив $tags в облако тегов на экране. Ясно-понятно, что первая строка в коде дана чисто для демонстрации структуры массива. Тут же возможны варианты, и если синтаксис PHP вам знаком, то разобраться в этих 3х строчках будет просто. В комментариях показано, какие значения принимают переменные.

Если вам кажется, что 1em - маловато для нормального размера тега, можно исправить 4ю строчку, заменив ($num/$avg) на страшнющее уравнение ($num * $a / $avg + $b), где $a - множитель, а $b - количество em, которое следует прибавить к конечному результату. Если кажется, что шрифт крупноват - напоминаю, что $a может быть меньше нуля, а $b может быть меньше 1.

В деле этот код можно посмотреть здесь.

Теги: php

Комментарии(6):

rss-лента

Добавлено: 2008-08-22 12:21:31, Валерий

Если можно ... чайнику и профану .... можно все что тут написано инструкцией...как можно на моём сайте это установить и без мускола ? у меня сайт не подерживает мускул...он на файловых базах... БУДУ даже ОЧЕНЬ благодарен

Добавлено: 2008-08-22 17:37:38, Bolzamo

Все зависит от реализации тегов, их хранения в этих самых файловых базах. Если не лень - можно скачать Neutrino AE по ссылке:
http://neutrino-cms.googlecode.com/files/neutrino-0.8.52.tar.bz2
И посмотреть там файл ext/taglist/index.php

Там все это реализовано на файловых хранилищах.

Добавлено: 2008-08-22 19:21:35, Валерий

Спасибо!!!
Сейчас попробую интегрировать в мой сайт...!!!!

Добавлено: 2008-08-22 19:58:39, Валерий

Пробывал... вроде ставиться все по инструкции , после того как в настройках вношу изменения (что написаны в инструкции ) пользователя и пароль , то после этого как обновляю страницу меня просто выкидывает из скрипта, разбиваеться дизайн... потому в следующем вопросе хочу спросить :
Я ставил скрипт примерно не в сам сайт а в папку сайта http://monrealovka.ca/neutrinoэто не может так влиять на работу движка ? и ещё.... я просил не блог а скрипт Облако Тегов для моего сайта.... я правельно понял что этот двиг что вы мне дали как бы выводит мне эти теги в блоке моего основного сайта, и что бы он работал именно на основной сайт ??? буду признателен если это будет именно работать у меня как МОД.... если можно это как то релизовать буду очень благодарен!!!

Добавлено: 2008-08-22 23:58:44, Bolzamo

Как я уже говорил, все зависит от конкретной реализации тегов в вашем конкретном случае. Универсального скрипта облака тегов никто вслепую не даст, надо смотреть, что к чему. Если интересно, могу оказать услугу в виде написания соответствующего мода.

Добавлено: 2008-08-23 02:11:31, Валерий

Я бы очень хотел и прошу оказать мне помощь и услугу... был бы очень рад !!!
Что для этого надо я постараюсь сразу же ответить ?

Добавить комментарий

Ваше имя:*
Ваш email:*(не публикуется)
Ваш сайт:
Ваш комментарий:*

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