Пишемо "хмара тегів" на PHP
Як вивести на сайті теги або ключові слова різними розмірами шрифту, щоб чим популярніше тег, тим більше був розмір слова, але не до нескінченності, а в якихось заданих межах?
Уф, найважче було перевести питання на прийнятний російський :)
Дійсно, "хмари тегів" є на більшості сучасних сайтів, мають вони найрізноманітніший вид, від красивих крутяться "флешок" до звичайного "поля слів", як в цьому блозі. Вся фішка в тому, щоб більш популярні слова виводилися бо льшим розміром шрифту, але процес цей не міг зайти надто далеко і був заздалегідь обмежений якимись заданими програмістом рамками :) Нам цілком вистачить кількох рядків коду з исходника цього блогу, які ми ще спростимо .
Знадобляться всього 3 настройки:
Тобто, ми розрізняємо не більше 10 різних розмірів шрифту, текст ніколи не буде менше 8 і більше BASEFONT + PTSTEP * TAGSLEVEL = 18 пунктів.
Припустимо, що цікавить нас зберігається в таблиці tags з наступною структурою:
Зрозуміло, в таблиці можуть бути інші поля, але вони для нас зараз несуттєві.
Спочатку дізнаємося, який максимальний з існуючих "рейтинг" тега:
Тепер виберемо все теги і в типовому циклі обробки сформуємо хмара. Розмір кожного тега-слова буде задаватися конструкцією виду слово. тобто, звичайними засобами HTML. Вийде приблизно такий код:
Вся справа, звичайно, у формулі для обчислення розміру тексту $ size по рейтингу тега $ tag [ 'rating']. Пояснити її легко. У загальному вигляді значення x. належить вихідного інтервалу [a, b]. можна лінійно перетворити в значення y. належить вихідному інтервалу [c, d]. за формулою:
Якщо кожен черговий рейтинг належить інтервалу [0, $ max] (вихідний інтервал), а нам треба "перегнати" його в розмір тексту, що належить інтервалу [BASEFONT, BASEFONT + TAGSLEVEL * PTSTEP] (вихідний інтервал), то, підставивши значення в формулу , отримуємо
або, після скорочення і округлення (адже всі розміри шрифту в пунктах - цілі числа), бачимо те, що написано в коді.