Облако тегов с относительными размерами
Раз уж Жилинский поднял тему о написании облака тегов, не откажу себе в удовольствии представить свой алгоритм подсчета размера записей для тегов, который, как известно, напрямую кореллирует с количеством записей, в которых оные теги встречаются.
Не буду запудривать вам мозг азами 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.
В деле этот код можно посмотреть здесь.

Комментарии(6):
rss-лентаДобавлено: 2008-08-22 12:21:31, Валерий
Добавлено: 2008-08-22 17:37:38, Bolzamo
Добавлено: 2008-08-22 19:21:35, Валерий
Добавлено: 2008-08-22 19:58:39, Валерий
Добавлено: 2008-08-22 23:58:44, Bolzamo
Добавлено: 2008-08-23 02:11:31, Валерий