Записи, связанные с тегом «PHP»

Movable Type стала одной из первых платформ, в которой появились теги. Случилось это ещё в третьей версии. А в четвёртой версии теги можно добавлять не только к записям, но и к загружаемым файлам или страницам. Но, как и в предыдущей версии MT, так и в текущей, функциональность тега MTTags не до конца продумана.

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

В четвёртой версии добавили возможность устанавливать количество отображаемых тегов, а также их сортировку по рангу. То есть стало возможно показать на сайте облако, в котором будет 50 самых популярных тегов. Сколько тегов будет в облаке — каждый, конечно, решит сам, но появление такой возможности порадовало меня. Но вот незадача: при сортировке по рангу теги так же и отображаются — чем популярней тег, тем он выше, или наоборот. Простой пример:

Облако тегов на MT.ru

Это совершенно не годится, так как визуальное восприятие такого облака не вызывает должного желания кликнуть по ссылке. Поэтому необходимо прибегнуть к помощи PHP.

Movable Type стала одной из первых блогинг-платформ, где теги стали поддерживаться на системном уровне. А в новой четвёртой версии теги можно будет добавлять к чему угодно: сообщениям, картинкам, другим загружаемым файлам, страницам. Но, как всегда, есть одно «но»: количество отображаемых тегов нельзя ограничить. То есть, если у вас 1000 тегов, то они будут выведены все. А это уже получается не облако, а целая туча.

Такая проблема возникла и передо мной, когда количество тегов перевалило за 1300. Показывать такой ужас посетителям нельзя, поэтому возникла задача: как ограничить выдачу тегов.
Стандартными тегами это сделать не удалось, хотя атрибут «lastn="X"» должен был работать, но почему то не хотел. Различные плагины (CloudNine и Tags.App) работать тоже не захотели. Пришлось искать средство самостоятельно. И вот что получилось:

<?
 $tagslist = array(<MTTags glue=", ">"<$MTTagName$>" => <$MTTagRank$></MTTags>);
 foreach ($tagslist as $tag => $tagsize) {
 if ($tagsize <= 4) {
  echo '<a href="http://your-site.ru/tag/'.urlencode($tag).'" class="tag'.$tagsize.'">'.$tag.'</a>';
  echo "\n";
  }
 }
?>

Эту конструкцию необходимо вставить в том месте страницы, где вы хотите отобразить облако тегов. Проще всего (и удобнее в дальнейшей работе) сделать отдельный индексный шаблон с вышеуказанным содержимым, который инклюдить в другие страницы.

Этот код отобразит только те теги, ранг которых равен 4 или больше.
(В Movable Type ранжирование тегов устроено следующим образом: чем больше сообщений связано с тегом, тем меньше цифра ранга.)
Цифру 4 можно легко изменить в зависимости от количества тегов. Например, если увеличить её до 5, то отобразятся ещё и теги с рангом 5.

Размер шрифта и внешний вид ссылок можно настроить c помощью CSS. В этом примере использованы классы «tagX», где X — это ранг тега.

Скачать исходный файл: mt_php_tag_cloud.zip (609 bytes)

1

Последние комментарии

  • TEST...

  • И правильно, недавно я тоже полностью на nginx перешёл :)...

    Андрей Серебряков
    Movable Type на PSGI и nginx
  • Спасибо, буду дальше ковырять. Решил полностью избавиться от апача, заодно систему почищу, а потом з...

  • mt.pid может не создаваться из-за прав доступа. Я посмотрел свой конфиг nginx, если выкинуть из нег...

    Андрей Серебряков
    Movable Type на PSGI и nginx
  • Что то у меня никак не хочет работать. Не создается файл mt.pid и в логах пусто. На fastcgi работае...

Закрыть