Облако тегов на CodeIgniter

Облако тегов на CodeIgniter

Облако тегов, Облако меток, или Облако ключевых слов (англ. tag cloud, wordle) — визуальное представление списка ярлыков (или категорий). Частота упоминаний, поисков, ссылок в интернете с определённого сайта неких слов, терминов, имён, отображается в специальной области в виде изображения этих слов в формате гиперссылок. Размер изображения тем больше, чем чаще использовался данный тег (слово, термин или имя).

Теги отражают наиболее общий смысл, тему материала (статьи, поста блога, новости). Для каждого материала может быть несколько тем или тегов. Например для данного поста тегами могут служить: «Теги», «Облако тегов», «Облако меток», «Облако ключевых слов». И когда посетитель увидит эти слова в облаке тегов, то ему станет ясно, о чем пойдет речь в материале. Так же в облаке рядом с каждым тегом приводится количество материалов, сходных по тематике. Таким образом правильно построенное облако тегов это еще один иструмент на сайте, упрощающий навигацию.

Ниже приведен пример реализации облака тегов на Codeigniter. В общем то ничего нового, но все таки - мало ли кому нибудь пригодится.

Итак, начнем с создания таблицы в базе данных. При этом могут быть варианты - таблица с тегами и таблица связи между тегами и документом (например постом блога или новостями), т.е. две таблицы, не считая таблицы с постами блога. Но мне нравится вариант ниже, с одной таблицей. В общем то дело вкуса:

CREATE TABLE IF NOT EXISTS `tags` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `DOC_ID` int(10) NOT NULL,
    `TYPE_DOC_ID` int(10) NOT NULL,
    `USER_ID` int(10) NOT NULL,
    `TAG` varchar(30) NOT NULL default '',
     PRIMARY KEY  (`id`),
     KEY `DOC_ID` (`DOC_ID`),
     KEY `TYPE_DOC_ID` (`TYPE_DOC_ID`),
     KEY `USER_ID` (`USER_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
  • DOC_ID - id документа, например поста блога или новости;
  • TYPE_DOC_ID - идентификатор типа документа (теги могут быть в разных документах: статьях, новостях, интервью и т.д...);
  • USER_ID - id пользователя;
  • TAG - собственно тэг.

По поводу реализации таблицы можно конечно спорить. Например, можно сделать составные ключи, или еще что нибудь придумать, пожалуйста, на ваше усмотрение.

Поедем дальше. Контроллер. К каждой строке имеется комментарий, поэтому вопросов быть не должно:

# загружаем модель
$this->load->model('tag_cloud_model');
# получаем массив тегов, отсортированный по возрастанию
$tags = $this->tag_cloud_model->get_tags(50);
# минимальное количество тегов
$min = $tags[0]->COUNT_TAGS;
# максимальное количество тегов
$max = $tags[count($tags)-1]->COUNT_TAGS;
# разница
$diff = $max - $min;
# проверка на ноль
if ($diff == 0) $diff++;
# минимальный размер шрифта
$minSize = 70;
# максимальный размер шрифта
$maxSize = 150;
# разница
$diffSize = $maxSize - $minSize;
# вычисляем размер шрифта и добавляем его в массив $tags
foreach($tags as $tag) {
   $tag->FONT_SIZE = round((($tag->COUNT_TAGS - $min) / $diff) * $diffSize + $minSize);
}
# сортируем массив по алфавиту
asort($tags);
# переменная для шаблона 
$content['tags'] = $tags;
# вывод
$this->load->view('tag_cloud_tpl', $content, TRUE);

В модели осуществляется выборка тегов, с привязкой к посту блога:

function get_tags($limit=30) {
 $this->db->select('tags.TAG, COUNT(tags.id) AS COUNT_TAGS')
    ->from('tags')
    ->join('post', 'post.id = tags.POST_ID', 'left')
    ->order_by('COUNT_TAGS', 'asc')
    ->group_by('tags.TAG')
    ->limit($limit);
 return $this->db->get()->result();
}

В отображении в цикле выводим данные:

<div class="cont_tags">
    <?php foreach ($tags as $item) : ?>
      <a style="font-size:<?=$item->FONT_SIZE?>%;" href="<?=base_url()?>tags/index/<?=$item->TAG?>/"><?=$item->TAG?>&nbsp;(<?=$item->TAGS_COUNT?>)</a>&nbsp;
    <?php endforeach; ?>
</div>

Резюмируя смысл облака тегов:

  • Человек заходя на сайт и видя облако понимает какая тематика сайта в целом.
  • Удобно найти материалы по каким то словам.
  • Облако тегов дает понять каких материалов, по какой тематике больше всего на сайте.

Результат работы скриптов можно посмотреть на этом сайте.

Похожие пубикации

CodeIgniter начало

CodeIgniter начало

Как уже упоминалось в статье Общие вопросы проектирования CMS, в качестве фреймворка для реализации движка CMS мы будем использовать CodeIgniter. О его приемуществах и недостатках можно почитать на бескрайних просторах интернета. Мне же лично он нравится прежде всего своей простотой, гибкостью использования, хорошей документированностью, быстрой скоростью работы, элементарной установкой на сервер и т.д. В настоящей статье рассматривается вопрос установки фреймворка для работы двух приложений на одном ядре, а также некоторые подготовительные действия для дальнейшего разворачивания системы управления контентом.
Добавить комментарий:



Back to Top