MODx облако тегов

MODx облако тегов

Ранее был рассмотрен вопрос тегирования сайта, вывода тегов в статьях и создание отдельных страниц для каждого тега, сегодня рассмотрим пример создания облака тегов с указанием количества использования каждого тега.

При реализации облака тегов в 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]]

Комментарии ()