Простенькое облако тегов на php

Нам понадобяться: руки, самые азы php и источник тегов для обработки. У меня источником выступает база данных mysql, а точнее её поля с метатегами.
Для начала выберем из базы (ну или считаем из файла, получим с сервера) необходимые теги.
Скажем они храняться в таблицах meta_k и meta_d и перечислены там через пробел.

/* в этом файле соединяемся с базой */
include"blocks/bd.php";

/* выбираем из необходимой базы теги */
$sql = mysql_query("SELECT meta_d,meta_d FROM art",$db);
$tags = mysql_fetch_array($sql);

/* приготовим переменную для хранения тегов */
$allTags = "";

/* запишем в неё все теги, которые есть в базе */
do {
     $allTags .= " ".$tags["meta_k]." ".$tags["meta_d];
 } while($tags = mysql_fetch_array($sql));

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

/* разделим все теги по пробелам и поместим в туже переменную */
$allTags = preg_split('( +|, +)',$allTags);  ///имейте ввиду, что $allTags станет массивом
$count = count($allTags);  ///количество тегов с повторами
for ($i = 0; $i < $count; $i++) {
    $thistag = $allTags[$i];
    if (!isset($Tags[$thistag])) {
        $Tags[$thistag] = 0;
    }else{
$Tags[$thistag] += 1; $allTags[$i] = null; } }

В приведенном листинге, мы в цикле проходим все элементы массива $allTags, при этом текущий элемент помещается в переменную $thistag. И если не существует записи в массиве $Tags с таким индексом, создаём эту запись со значением 0. Если же такая запись уже есть, это значить, что такой тег уже встречался — необходимо увеличить значение в массиве $Tags на 1 и уничтожить дубликат пройденного тега.

Теперь осталось дело за малым, вывести всю эту котовасию на экран. Как вы наверное понимаете, чем больше повторяемость тега, тем больший размер шрифта мы должны указать. Выводить будем ссылки на поиск по указанному тегу (в примере параметр str как раз и является строкой для поиска).

for ($i = 0; $i < $count; $i++) {
    $thistag = $allTags[$i];

/* зададим минимальный размер шрифта 10 */
    $size = 10 + $Tags[$thistag];

/* выводим только теги, которые повторяются больше 1 раза */
    if ($size > 10)
    printf('<a href="search.php?str=%s" style="font-size: %s;">%s</a> ',$thistag,$size,$thistag);
}

Обратите внимание, что после ссылки лучше оставить пробел, это делается для того, чтобы браузер не рассматривал их как слитную массу и переносит на новую строку.
Теперь неплохо было бы поместить всё это дело в div с фиксированной шириной.
Вот и всё) Удачи!

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. lamazavr

    Похоже то что надо! Теги те что внизу выводятся по этойже схеме?

    Ответить
  2. lamazavr

    по сходной =)
     

    Ответить
  3. Виталий

    Этот скрипт не полезен, так как необходимо сделать крутящее облако тегов. А вы пишите куча функций и засоряете код. В итоге ваши ссылки обычные и стоят на месте. Какое это облако? Которое стоит на месте!

    Ответить
  4. lamazavr

    Ну это уже из области вордпресов с их плагинами, не вижу ничего красивого в крутилке. При большем количестве тегов, оно полностью бесполезно.

    Ответить
  5. Александер

    Здравствуйте. А если простой дизайнер со знанием html будет вручную вписывать теги в код страниц, то как преобразовать ваш код, чтобы начальный пункт получения данных был не MySQL, а код страниц?

    Ответить