Облако запросов для сайта
Как создать облако тегов на сайте
Прочитав данную статью, вы без каких-либо проблем самостоятельно сможете создать облако тегов для вашего сайта. Для начала давайте разберемся, что из себя представляет облако тегов или облако меток ( также принято называть облако ключевых слов, определение в Wikipedia ). По сути - это набор ключевых слов, размер каждого из которых тем больше, чем чаще данное слово встречается на страницах сайта.
Подготовка страниц сайта
Чтобы начать создание облака, нужно подготовить страницы сайта. На данном этапе мы предлагаем два варианта: либо присвоить каждой странице отдельный параметр - список ключевых слов, либо система сама будет анализировать контент страницы, выявляя появление в нем нужных слов. Выбирая первый способ, вам потребуется создать отдельное поле в Базе данных ( если она, конечно, имеется) для каждой страницы и хранить в нем ключевые слова. Если на вашем хостинге отсутствует БД, то есть альтернативный вариант - хранить слова в скрытом
Выбор модели облака - высоконагруженная модель дерева тегов
Подготовив страницы, переходим к следующему этапу. При выводе дерева тегов на сайте, вы можете выбрать два пути:
1. Весь анализ страниц и перерасчет облака происходит при каждом обновлении страницы. Мы даже не будем рассматривать данный вариант, т.к. он создаст колоссальную нагрузку на ваш сервер, и это просто непрактично.
2. Данный способ разделяет облако на 2 составляющие, так называемая frontent-backend модель. Для нее вам не обязательно потребуются 2 выделенных сервера, все можно реализовать на обычном хостинге с php, но нагрузка на сайт по сравнению с первым вариантом будет несравнима.
Суть идеи заключается в том, что мы пишем модуль, который формирует html-файл с нашим деревом, ставим этот модуль на Cron ( к примеру, чтобы он запускался раз в 2 недели, чаще и не потребуется), а на сайте мы просто будем отдавать статику, то есть вывод дерева примерно будет выглядеть так:
Написание модуля
Настал самый сложный этап - написание модуля, который будет создавать статический файл с деревом. Для начала составим каркас ( стили для наглядности будут прописаны прямо в тегах, но само собой, лучше их вынести в .css файл ).
Каркас облака:
Функция вывода одного ключевого слова:
function drawKeyWord($word,$href="/",$size)
{
if(strlen($word)==0 )
{
return "";
}
return "".$word." ";
}
?>
Далее необходимо написать алгоритм анализа ключевых слов, и определение размера каждого. Рассмотрим пример, когда ключевые слова для каждой страницы хранятся в отдельной ячейке таблицы для каждой страницы.
Примерная структура таблицы:
pageID - ID страницы
words - слова через запятую
Первым делом нужно собрать весь список слов, одновременно получив количество его вхождений на сайте. Можно придумать множество алгоритмов обработки, можно придумать другую схему БД, и выполнить сложный запрос с группировкой, который также уменьшит количество итераций в цикле обработки, мы лишь рассмотрим один из возможных вариантов:
function getWords()
{
$words=array();
$q=mysql_query("SELECT words FOM `keywords_table` WHERE 1"); // выбираем все слова
while($row=mysql_fetch_array($q))
$str=explode(",",$row["words"]);
$kol=count($str);
for($i=0;$i {
if(!in_array($str[$i],$words)){$words[$str[$i]]=0;}else{$words[$str[$i]]++;}
}
}
return $words;
}
?>
Результатом работы данной функции будет являться массив $words, в качестве ключей которого будут ключевые слова, а значения - их количество на страницах. Теперь осталось совсем немного, нужно запустить цикл обработки каждого слова, и записать результат в переменную, ниже приведен исходный код:
$words=getWords();
$min_sh=8; // минимальный размер слова в облаке
$max_sh=16; // максимальный размер слова в облаке
$max=0;
foreach($words as $word=>$length){ // цикл определяет самое часто употребляемое слово на сайте
if($length>$max){$max=$length;}
}
// переменная $content служит для хранения контента нашего облака тегов
$content.="
";
Осталось записать переменную в файл:
$filename="tags_tree.html";
$f=fopen($filename, "w") or die("error");
$fputs($f,$content);
fclose($f);
Приведенный код очевиден, и в комментариях не нуждается. Вы можете скачать исходный код модуля одним файлом.
Исходный код примера модуля, формирующего облако меток, является лишь примером и схемой для общего алгоритма действия. Каждый веб проект требует индивидуального подхода к его проектированию. Никогда не жалейте времени и сил на написание качественного и оптимизированного кода, и всегда старайтесь писать проекты, рассчитывая, что они будут работать под высокой нагрузкой, это в будущем сэкономит вам средства и время на решение возникших проблем.
10 Июль 2011 г.
метки: