Вернуться   D3Scene.Ru Софт портал игр | Хаки | Проги | Статьи > Free chat > Флейм
Присоединяйся к нам



Закрытая тема
 
Опции темы Опции просмотра
Старый 11.04.2009, 20:55   #1
Гость
 
Аватар для [VST].Puzi'rok
 
Сообщений: n/a
Сообщение

Как сделать облако теггов для адменов


Вы когда-нибдуь задумывались как работает облако тегов? Давайте помогу задуматься? Не бойтесь, тут нет ничего сложного. К сожалению, в рунете, как обычно, туго с информацией такого плана. Поверхностные поиски привели лишь на один интересный ресурс, где автор рассуждает на тему [Ссылки скрыты от гостей.]. Ну, в РУнете нет, так в интернете будет - точно, википедия, как обычно, готова вам взахлеб рассказывать про [Ссылки скрыты от гостей.]. Собственно, там есть линки, описание и всё подобное, я же на пальцах расскажу как это сделать.

Что по сути есть облако тегов? По сути это более наглядный список неких категорий, применительно к блогам - тем, которые освещены в рамках сайта. Собственно, справа вы как раз можете наблидать такое облако. Так как же сделать такое самому? Да очень просто!

Первое что надо понять - облако тегов такой же нормальный текст как и список, разница лишь в оформлении. Часто употребимое - большое и заметно, редкоупотребимое - мелкое. Тут поднимается первая задача: определить частоту использования. Это просто.

Выбираем все теги (из БД/файлов или как угодно еще), у меня из БД:
$result = mysql_query("SELECT `tags` FROM `$tb_dump`
ORDER BY `date_modified` DESC"); Если получается массив, как в моем случае, то собираем это в строку через некий знак, допустим, запятую:
while ($item = mysql_fetch_array($result))
$dump_string .= $item["tags"].",";Теперь у нас есть строка всех тегов, осталось их посчитать:
$dump_mas = explode(",", $dump_string);
while (list($key, $val) = each($dump_mas))
{ if (isset($mas[trim($val)]))
$mas[$val]++;
else
$mas[$val] = 1;
}Всё, у нас есть ассоциативный массив в котором ключ - это тег, а значение элемента - количество повторений. Чтобы вывести такое облако достаточно вывести массив. Для простоты я буду использовать высоту шрифта для индикации количества повторений:
while (list($key, $val) = each($mas))
echo "<span style\"font-size:$val\">$key</span>";Вот и всё облако. Ничего сложного, правда?

Остался только десяток-другой ньюансов :) Например, производительность: собирать строку из массива, чтобы потом опять разбирать в массив явно не самое элегантное решение, согласитесь. Зато достаточно общий и весьма показательный вариант, на деле можно будет из первого массива сразу собирать последний. Дальше, неплохо бы пронормировать результат, что если тег встретиться 120 раз? Шрифт высотой в 120 пикселей - не самое приятное зрелище, по идее надо выводить не $val, а что-то типа 30*$val/max($mas). Третье - хорошо бы менять не только размер шрифта. Тут нам помогут стили, сделайте сколько удобно и вызывайте согласно частоте. Моя цель - показать, а не сделать идеальный генератор облака.

Чуть более интересные ньюансы. Если вы полистали линки, что приведены выше, то вероятно наткнулись на [Ссылки скрыты от гостей.]. Там решено было цветом выделять последнее, хорошая мысль. В моем примере облако постоянно дрейфует за счет выборки в порядке модификации (см. запрос выборки тегов), т.е. более новые выше, более старые в конце. Если вам нравится располагать алфавитно, то надо лишь дописать перед выводом:
ksort($mas);

Как видите, всё достаточно просто, CSS с набором стилей можно вообще утащить у кого понравится, механизм отображения практически целиком перед вами. Я не стал перегружать примеры всякими проверками, инциализациями и прочей вспомогательной атрибутикой, а также красивостями, с этим вы наверняка и сами справитесь ;)
  Наверх
Старый 11.04.2009, 21:32   #2
Матерый

 
Аватар для SouL
 
Регистрация: 19.03.2009
Адрес: Красноярск
Сообщений: 311
Репутация: 144
Отправить сообщение для SouL с помощью Skype™
По умолчанию

Цитата:
Сообщение от [VST].Puzi'rok Посмотреть сообщение
Вы когда-нибдуь задумывались как работает облако тегов? Давайте помогу задуматься? Не бойтесь, тут нет ничего сложного. К сожалению, в рунете, как обычно, туго с информацией такого плана. Поверхностные поиски привели лишь на один интересный ресурс, где автор рассуждает на тему [Ссылки скрыты от гостей.]. Ну, в РУнете нет, так в интернете будет - точно, википедия, как обычно, готова вам взахлеб рассказывать про [Ссылки скрыты от гостей.]. Собственно, там есть линки, описание и всё подобное, я же на пальцах расскажу как это сделать.

Что по сути есть облако тегов? По сути это более наглядный список неких категорий, применительно к блогам - тем, которые освещены в рамках сайта. Собственно, справа вы как раз можете наблидать такое облако. Так как же сделать такое самому? Да очень просто!

Первое что надо понять - облако тегов такой же нормальный текст как и список, разница лишь в оформлении. Часто употребимое - большое и заметно, редкоупотребимое - мелкое. Тут поднимается первая задача: определить частоту использования. Это просто.

Выбираем все теги (из БД/файлов или как угодно еще), у меня из БД:
$result = mysql_query("SELECT `tags` FROM `$tb_dump`
ORDER BY `date_modified` DESC"); Если получается массив, как в моем случае, то собираем это в строку через некий знак, допустим, запятую:
while ($item = mysql_fetch_array($result))
$dump_string .= $item["tags"].",";Теперь у нас есть строка всех тегов, осталось их посчитать:
$dump_mas = explode(",", $dump_string);
while (list($key, $val) = each($dump_mas))
{ if (isset($mas[trim($val)]))
$mas[$val]++;
else
$mas[$val] = 1;
}Всё, у нас есть ассоциативный массив в котором ключ - это тег, а значение элемента - количество повторений. Чтобы вывести такое облако достаточно вывести массив. Для простоты я буду использовать высоту шрифта для индикации количества повторений:
while (list($key, $val) = each($mas))
echo "<span style\"font-size:$val\">$key</span>";Вот и всё облако. Ничего сложного, правда?

Остался только десяток-другой ньюансов :) Например, производительность: собирать строку из массива, чтобы потом опять разбирать в массив явно не самое элегантное решение, согласитесь. Зато достаточно общий и весьма показательный вариант, на деле можно будет из первого массива сразу собирать последний. Дальше, неплохо бы пронормировать результат, что если тег встретиться 120 раз? Шрифт высотой в 120 пикселей - не самое приятное зрелище, по идее надо выводить не $val, а что-то типа 30*$val/max($mas). Третье - хорошо бы менять не только размер шрифта. Тут нам помогут стили, сделайте сколько удобно и вызывайте согласно частоте. Моя цель - показать, а не сделать идеальный генератор облака.

Чуть более интересные ньюансы. Если вы полистали линки, что приведены выше, то вероятно наткнулись на [Ссылки скрыты от гостей.]. Там решено было цветом выделять последнее, хорошая мысль. В моем примере облако постоянно дрейфует за счет выборки в порядке модификации (см. запрос выборки тегов), т.е. более новые выше, более старые в конце. Если вам нравится располагать алфавитно, то надо лишь дописать перед выводом:
ksort($mas);

Как видите, всё достаточно просто, CSS с набором стилей можно вообще утащить у кого понравится, механизм отображения практически целиком перед вами. Я не стал перегружать примеры всякими проверками, инциализациями и прочей вспомогательной атрибутикой, а также красивостями, с этим вы наверняка и сами справитесь ;)
Указывай источник
__________________
ZM
  Наверх
Старый 12.04.2009, 10:32   #3
Бан
 
Аватар для AnSaRiQ
 
Регистрация: 21.03.2009
Сообщений: 147
Репутация: 71
Отправить сообщение для AnSaRiQ с помощью ICQ Отправить сообщение для AnSaRiQ с помощью Skype™
По умолчанию

я не понел что ето такое!!! Объясните плс!
  Наверх
Старый 12.04.2009, 14:02   #4
Гость_за_инактив
 
Аватар для ihammer
 
Регистрация: 10.03.2009
Адрес: Москва
Сообщений: 37
Репутация: 2
Отправить сообщение для ihammer с помощью ICQ
По умолчанию

Облако тегов это имеется ввиду категории как на YouTube категории видео собранные в перемешку.
__________________
[Ссылки скрыты от гостей.][Ссылки скрыты от гостей.]
  Наверх
Старый 12.04.2009, 14:31   #5
Гость_за_инактив
 
Аватар для аман
 
Регистрация: 13.12.2008
Сообщений: 36
Репутация: 4
По умолчанию

ihammer, прав
__________________
[Ссылки скрыты от гостей.][/IMG]
  Наверх
Закрытая тема


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Powered by vBulletin
Copyright © 2017 vBulletin Solutions, Inc.
Перевод: zCarot | Дизайн: G-A | Верстка: OldEr
Текущее время: 09:33. Часовой пояс GMT +4.