Облако тегов в линию на php
Генерация облака тегов. Общие моменты ясны из определения (wiki): "визуальное представление списка ярлыков (или категорий). Частота упоминаний, поисков, ссылок в интернете с определенного сайта неких слов, терминов, имен, отображается на специальной странице в виде изображения этих слов в формате гиперссылок. Размер отображения тега тем больше, чем выше релевантность данного слова (термина, имени)".
Релевантность в нашем случае определяется количеством вхождений каждого тега в их общую массу.
Учитывая все вышесказанное, весь алгоритм построения облака тегов можно разделить на 2 этапа:
- Генерация списка пар тег-количество вхождений
- Вывод облака с учетом релевантности тегов
1-я задача решается довольно просто с технической точки зрения. 2-я тоже, но здесь возможны вариации.
Ниже - класс, который написан для генерации облака тегов.
<?class TagsCloud{
private $tags;
private $font_size_min=14;
private $font_size_step=5;
function __construct($tags){
shuffle($tags);
$this->tags=$tags;}
private function get_tag_count($tag_name,$tags){
$count=0;
foreach($tags as $tag){
if($tag==$tag_name){
$count++;}}
return $count;}
private function tagscloud($tags){
$tags_list=array();
foreach ($tags as $tag){
$tags_list[$tag]=self::get_tag_count($tag,$tags);}
return $tags_list;}
private function get_min_count($tags_list){
$min=$tags_list[$this->tags[0]];
foreach ($tags_list as$tag_count){
if($tag_count<$min)$min=$tag_count;}
return $min;}
public function get_cloud(){
$cloud=Array();
$tags_list=self::tagscloud($this->tags);
$min_count=self::get_min_count($tags_list);
foreach($tags_list as$tag=>$count){
$font_steps=$count-$min_count;
$font_size=$this->font_size_min+$this->font_size_step*$font_steps;
$cloud[]="<span style='font-size:".$font_size."px'>".$tag."</span>";}
return$cloud;}}?>
Работать с этим классом примерно так:
<?$tags=array('ajax','javascript','php','ajax','jquery','seo','seo','php','blog','ajax','php','html','css','ajax','javascript','css','jquery','php');$mycloud=new TagsCloud($tags);$tags_list=$mycloud->get_cloud();foreach($tags_list as $tag){echo$tag.' ';}?>
2 этап построения облака тегов (вывод облака) заключается в преобразовании показателя релевантности (количество вхождений) в размер шрифта результирующей надписи.
В классе это реализовано следующим образом: в настройках задается минимальный размер шрифта, который соответствует минимальному уровню релевантности (1 вхождение). Все теги с большей релевантностью имеют размер на столько пикселей больше, на сколько больше они имеют вхождений. Шаг изменения можно задавать полем font_size_step, а минимальный размер шрифта полем font_size_min.
Работает только с латиницей по размеру шрифта, и кодировка не помогает (это огромный минус), зависит от индивидуальных настроек сервера хостера (может и не сработать из-за устаревшей версии, что вы тут и наблюдаете).
Скачать скрипт можно тут.