Ранее был рассмотрен вопрос тегирования сайта, вывода тегов в статьях и создание отдельных страниц для каждого тега, сегодня рассмотрим пример создания облака тегов с указанием количества использования каждого тега.
При реализации облака тегов в MODx используется компонент pdoTools, создайте новый сниппет, назовите его Tagscloud, вставьте в него следующий код:
<?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)) {
// Подсчитывает сколько раз был использован тег
foreach ($tagsID as $id) {
$count[$id]++;
}
$parameters = array(
'parents' => 6, // ID - корнего раздела с тегами
'depth' => 0, // не искать в дочерних элементах
'resources' => implode(",", $tagsID) // список ID тегов для выборки
);
// Получает данные ресурсов (тегов)
$tags = $pdo->getCollection('modResource', null, $parameters);
if (!empty($tags)) {
foreach ($tags as $tag) {
$tag['count'] = $count[$tag['id']];
$output .= $pdo->getChunk('@INLINE [[+menutitle:empty=`[[+pagetitle]]`]] ([[+count]])', $tag);
}
return $output;
}
}
}
Осталось в нужное место шаблона сайта вставить:
[[Tagscloud]]
Комментарии ()