xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как с помощью Views 3 вывести список терминов с количеством помеченных ими нод

Опубликовано в

Список терминов

Во втором Views подобные задачи решались либо с помощью дополнительных модулей, либо с помощью сниппетов. В Views 3 же стало возможно использовать агрегатные функции COUNT, AVG, MAX, MIN и SUM:

1. Создаём представление по терминам:

2. Добавляем Relationship "Taxonomy term: Content using ИМЯ_СЛОВАРЯ" (в принципе можно и "Taxonomy term: Content with term"):

На втором шаге отмечаем опцию Require this relationship:

Этим пунктом мы к основной таблице taxonomy_term_data подключили таблицу node.

3. В блоке Other включаем пункт Use aggregation:

Благодаря этому пункту можно будет использовать агрегатные функции.

4. Добавляем новое поле Content: nid:

На втором шаге выбираем агрегатную функцию Count:

На третьем шаге можно добавить префикс и суффикс полю:

Результат:

Полезные материалы по теме:
Использование GROUP BY и агрегатных функций в Views 3 (видео)
Программно вывести термины словаря в виде дерева с подсчётом количества материалов
Список тегов материала "как на стэковерфлов"

Написанное актуально для Views 3.x
Похожие записи

Комментарии RSS

Это круто. Не думал что в вьевсе такое сделают. Зачет.

Столкнулся с проблемой при использовании этих функций.
Суть в следующем: у термина есть поле изображение, при группировке оно не выводится. Без группировки все норм, выводится и термин и его изображение. Кто-нибудь сталкивался? Есть решение?

проверил, выводится.

Проверил еще раз. Получаю над областью предпросмотра два сообщения:
инфо: 1311761233

и

ошибка: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id, taxonomy_term_data_name, taxonomy_term_data_vid, tid_1, taxonomy_vocabulary_' at line 9

Без использования агрегации картинки выводятся, как только ставлю Use aggregation: Да - появляются те сообщения, которые я упомянул выше.

Есть предположения, в чем может быть трабл?

Views 2.x тоже разрешает такое сделать. http://my.jetscreenshot.com/5611/20110727-5sfj-91kb

это т.н. summary, оно для другого и далеко с ним не уедешь

Со 2-ми вьюсами все ок, получалось. Это с 3-ми вот такое вышло. Покручу еще на нулевой сборке, когда найду причину - отпишу.

Мой комментарий касался вот этого "Во втором Views подобные задачи решались либо с помощью дополнительных модулей, либо вообще без Views с помощью сниппетов." Конкретно эту задачу через Views 2.x решить можно. Было бы любопытно, почему такое решение Вы считаете некорректным.

это просто вид страницы при отсутствии аргумента, на этом функции summary аргументов заканчиваются. попробуйте сделать полноценную навигацию по таксономии

ох, спасибо тебе! …замучался искать. решение неочевидное…

упс… мне под views-2 нужно…

Огромное человеческое спасибо за материал :)

Только одна поправочка: у меня не было поля Content: nid (пункт 4). Заменил его полем "Добавляемый термин: ID термина". Всё работает.

Подскажите, пожалуйста, можно ли в одном представлении построить иерархию Словарь->Термин->Дочерний термин? С соответствующей группировкой в отображении по родительским терминам. Или все-таки делать(как у меня сейчас) несколько вьюшек Словарь->Термин?

views не может строить иерархий

Это самая большая его беда :(. А так бы - цены не было :)
В 1С 8.X простое добавление В ИЕРАРХИИ,а какой результат... :)
(http://www.v8.1c.ru/book/skd_dev/chapter5.pdf)

А как привести такой список к виду как у вас на сайте (счётчик сразу после поля "Раздел"), а не так как получается по умолчанию.

Можно в настройках полей включить Встроенные поля.

Всё супер гуд, спасибо! (обеим ответам)

Большое спасибо, долго ломал голову как это можно сделать, но с вашими скринами всё получилось.
Написал тоже самое, только добавил больше описания и скринов
http://nixtalks.com/views
http://nixtalks.net/views (на англ.)

xandeadx, Как убрать из подсчета неопубликованные материалы?

добавить фильтр

Я добавил фильтр Содержимое: Опубликовано
Но тогда у меня появляется пустая страница.
А хочется вот так:
ВАЗ 2101 (0)
ВАЗ 2102 (0)
...

Сейчас так:
ВАЗ 2101 (0)
ВАЗ 2102 (1) - есть одино объявление снятое с публикации

У меня нулевые результаты тоже показываются. Наверное из-за этого проблема.

Разобрался, проблема в модуле Auto Expire. После окончания срока публикации объявление не показывалось, но имело статус Опубликовано, потому оно и отображалось в счетчике.

добрый день.
с термином получилось, спасибо!
а как сделать в содержимом?
Добавляю поле COUNT(Содержимое: Nid), выводится "(1) (1) (1) (1) (1) ", и не груперуется, как сгрупировать, что бы было "(5) "

Как долго я искал решение, а оно лежало здесь. Автору поклон.

Большое спасибо! Как раз искал, как такое сделать для своего недо-блога/недо-записной книжки

а можно ли из вывода этой вьюхи построить меню?

смотря какие функции вам нужны от меню

в шестерке аналогичное меню делал taxonomy_menu, но в семерке его функционал значительно скуднее, и число нод в терминах модуль теперь не выводит, вот и думаю, как бы такое реализовать малой кровью.

и число нод в терминах модуль теперь не выводит

замечательно выводит

в -dev версии? потому что в 7.x-1.2 даже галки нет для включения числа нод.

да

ясно. спасиб за инфу.

dev версия не выводит общее количество нод принадлежащих подчиненым терминам. Как автор сделал у себя такое меню? Чтобы подменю раскрывалось...

Огромное спасибо за материал.
Я два дня над вьюсом сидел, не получалось. Прочитал статью - и за пол-часа все сделал.

все прекрасно работает НО

терминры по которым нет соотвествующих материалов НЕ ВЫВОДЯТСЯ!

а мне нужно например: ТЕРМИН (0)

все перерыл, ну никак!
а у когото я смотрю наоборот, 0 показывает

как быть?

отключите опцию Require this relationship

елки! я отключал, но видать не сохранил вьюху, вот и не сработало! отчего был в ступоре

спасибо!! все ок!

еще вопрос:
все работает, но мне нужно еще подсчитывать только те материалы, диапазон дат которых актуален на данный момент (startdate<=now<=enddate)

как такое можно сделать?

диапазон дат - это поле календаря

Добрый день. По слухам, сайт drupal-tv.ru - это ваш проект. Подскажите, что использовали при построении навигации по сайту, кроме штатных средств taxonomy. Спасибо.

самописный модуль

И на орге его нет и достать его не получится... жаль. Но всё равно спасибо.

Подскажи, пожалуйста, как сделать тоже самое для юзеров?

Условия: у юзеров при регистрации есть возможность выбрать к какой категории они относятся (10 шт. чекбоксов).

Задача: вывести список терминов (категорий) с количеством пользователей, которые при регистрации указали те или иные термины (категории). Должно быть примерно так - "Художник (13), Аниматор (141), Режиссёр (1), ...".

Делаю всё как для терминов (как тут описано), но указываю поле "User: Uid" и в взаимосвязях "Термин таксономии: User using Tags". При таком раскладе выводит только "(5)" - при условии, что один пользователь выбрал 5 шт. категорий при регистрации.

Прошу помощи, короче говоря.

Когда отправил - понял как сделать ;) ложная тревога, прошу прощения..

Подскажите как вывести термины вместе с тайтлами нод вместо счетчика

На примере алфавита:

А(термин)
- Апельсин(нода)
- Ананас(нода)
- Абрикос(нода)
Б(термин)
- Банан(нода)
- Брокали(нода)
В(термин)
- Виноград(нода)

Именно такой вывод нужен!

Потыкал в вивсе, и в данный момент получается только так:

А(термин)
- Апельсин(нода)
А(термин)
- Ананас(нода)
А(термин)
- Абрикос(нода)
Б(термин)
- Банан(нода)
Б(термин)
- Брокали(нода)
В(термин)
- Виноград(нода)

т.е. термин каждый раз повторяется в зависимости от количества нод.

включите группировку

Спасибо, помогло!
Подскажите как вывести счетчик родительского тремина? пример ниже:

В наличии
Все марки (3) - как вывести это значение?
TOYOTA (2)
NISSAN (1)

без кодинга никак

может поможете с кодингом, за вознаграждение

не помогло, сколько стоит час вашей работы?

Спасибо! Помогло

Здорово!
На основе этого примера получилось вывести количество зарегистрированных пользователей в блоке Views.

Спасибо!

спасибо, очень помогли!!!

как выводить в одной линии ?
---------------------
TOYOTA (2)
------------------
TOYOTA
(2)

Очередное спасибо, почти каждый день беру с сайта что-то полезное!

как выводить в одной линии ?

- отключить, не показывать поле с названием фирмы,
- у второго поля поставить галку Заменить выводимое полем значение и ввести типо:
[name] [nid]

А сортировать их по кол-ву нод в этой реализации можно?

Не работает.

Подскажите пожалуйста, как вычесть 1 (единицу) из результата?

А возможно ли аналогичным образом вывести не кол-во материалов термина, а кол-во его дочерних терминов?

Для того чтобы отобразить колл. нод принадлежащих юзеру я добавил аргумент Содержимое: UID Автора а так же убрал галочку Эта связь обязательна
Из за аргумента перестали выводится термины которые не содержат нод
Как отобразить эти термины?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании