Movable Type стала одной из первых платформ, в которой появились теги. Случилось это ещё в третьей версии. А в четвёртой версии теги можно добавлять не только к записям, но и к загружаемым файлам или страницам. Но, как и в предыдущей версии MT, так и в текущей, функциональность тега MTTags не до конца продумана.
В третьей версии можно было выводить список всех (!) тегов, исключая возможность ограничения количества. По идее должно было получиться облако. Когда тегов становилось много, облако превращалось в тучу и занимало большую часть экрана. Тогда на помощь пришло решение на PHP, которое позволяло отображать облако с тегами, ранг которых был равен или меньше 4.
В четвёртой версии добавили возможность устанавливать количество отображаемых тегов, а также их сортировку по рангу. То есть стало возможно показать на сайте облако, в котором будет 50 самых популярных тегов. Сколько тегов будет в облаке — каждый, конечно, решит сам, но появление такой возможности порадовало меня. Но вот незадача: при сортировке по рангу теги так же и отображаются — чем популярней тег, тем он выше, или наоборот. Простой пример:
Это совершенно не годится, так как визуальное восприятие такого облака не вызывает должного желания кликнуть по ссылке. Поэтому необходимо прибегнуть к помощи PHP.
Создаём нормальное облако тегов
- Самое первое, что необходимо — сделать расширение файлов .php. Для этого перейдите в настройки блога, а затем во вкладку «Publishing». И возле пункта «File Extension for Archive Files» впишите «php» (без точки в начале). После этого все архивы (посты, категории, страницы, архивы по датам) будут публиковаться с новым расширением. Но некоторые индексные файлы, например, Main Index и Archives, останутся с прежними расширениями. Поэтому необходимо перейти в раздел Templates и вручную указать расширение для этих шаблонов.
- Далее необходимо создать индексный шаблон (назовём его TagsCloud, с именем публикуемого файла tagscloud.php), который будет публиковаться автоматически, со следующим содержимым:
Скачать пример с комментариями.<?
$tagslist = array(<MTTags limit="50" sort_by="rank" glue=", ">"<$MTTagName$>" => <$MTTagRank max="10"$></MTTags>);
ksort($tagslist);
reset($tagslist);
while (list($tag, $tagsize) = each($tagslist))
{
echo '<a href="http://example.com/tag/'.rawurlencode($tag).'" class="t'.$tagsize.'" rel="tag">'.$tag.'</a>';
echo "\n";
}
?>
- Чтобы шаблон TagsCloud отображался на других страницах сайта, его нужно включить в эти страницы. Делается это с помощью функции include в PHP:
<? include ("/home/user/example.com/template-path/tagscloud.php"); ?>
Если у вас стандартные шаблоны, то эту строчку необходимо поместить в шаблон сайдбара («Sidebar (3-column)» или «Sidebar (2-column)»). Найдите в одном из этих шаблонов код <MTTags limit="20" sort_by="rank">, завершающийся </MTTags>, удалите её и замените строчкой из третьего пункта. Обратите внимание, что у каждого свой путь на сервере, его нужно узнать самостоятельно, заглянув в настройки публикации блога.
Ну вот и всё, теперь у вас должно быть нормальное облако тегов, вроде этого:
Ссылки по теме
- Everybody loves tags!
Смотрим пункт «Beautifying the tag search link URLs» и узнаём, как сделать красивые URL для тегов.
Сортировку тэгов по имени в MT 4.1 можно сделать легче:
Для сортировки тэгов по имени в "Облаке тэгов" Movable Type 4.1 надо отредактировать стандартный виджет "Tag Cloud", заменив "rank" в строке на "name", в итоге получаем .
http://holygun.ru/blog/2008/03/-mt.html
Если отсортировать по name, при этом задав лимит по количеству тегов, то вполне вероятно, что самый популярный тег не попадёт в облако.
Понятно ;) У меня Ваш способ не прошел, была ошибка типа mismatched {/mttags} в Smarty.
У вас включена динамическая публикация?
Да.