MODx облако тегов
Ранее был рассмотрен вопрос тегирования сайта, вывода тегов в статьях и создания отдельных страниц для каждого тега, сегодня рассмотрим пример создания облака тегов с указанием количества использования каждого тега.
При реализации облака тегов в MODx используется компонент pdoTools, создайте новый сниппет, назовите его Tagscloud, вставьте в него следующий код:
PHP
<?php
$pdo = $modx->getService('pdoFetch');
$where = array(
'tmplvarid' => 2 // ID дополнительного поля (TV)
);
// Получает все ресурсы, где используются теги
$tvs = $pdo->getCollection('modTemplateVarResource', $where);
if (!empty($tvs)) {
$tagsID = array();
foreach ($tvs as $k => $tv) {
// Для разделения ID тегов используется ||
// если Вы используете другой, то укажите его
$tagsID = array_merge($tagsID, explode('||', $tv['value']));
}
if (!empty($tagsID)) {
// Подсчитывает сколько раз был использован тег
$count = array();
foreach ($tagsID as $id) {
$count[$id] = isset($count[$id]) ? $count[$id] + 1 : 1;
}
$parameters = array(
'parents' => 6, // ID - корнего раздела с тегами
'depth' => 0, // не искать в дочерних элементах
'resources' => implode(',', $tagsID) // список ID тегов для выборки
);
// Получает данные ресурсов (тегов)
$tags = $pdo->getCollection('modResource', null, $parameters);
if (!empty($tags)) {
$output = '';
foreach ($tags as $tag) {
$tag['count'] = $count[$tag['id']];
$output .= $pdo->getChunk('@INLINE <a href="[[+uri]]" itemprop="keywords" class="tags__link">[[+menutitle:empty=`[[+pagetitle]]`]] ([[+count]])</a>', $tag);
}
return $output;
}
}
}
Осталось в нужное место шаблона сайта вставить:
[[Tagscloud]]
Комментарии 0
Написать комментарий