Доброго времени суток, уважаемые! Хочу поделиться проблемой решением проблемы:
Стала задача - вывести в блок список самых активных блоггеров. Вывести имя пользователя и количество нод типа Blog post, оставленных им. Сортировка по убыванию по количеству постов. И имя каждого пользователя в добавок ко всему должно было выводиться ссылкой на его блог.
В итоге получилось следующее:
Как получилось? Под катом.
Итак, по порядку. Что я имел для достижения цели:
Drupal 7.x
Views 3.0-beta3
Рецепт получения блока:
Делаем новую вьюшку и делаем дисплей Block.
Мы будем выводить поля. По сему ставим Show:Fields
Фильтр: по типу содержимого Blog entry. Ставим Content: Type (= Blog entry)
Какие мы выводим поля:
- User: Name (ставим галку на Exclude from display, так как нам нужно просто взять из базы данных значение, но фактически не показывать его в данном поле. Почему - опишу ниже.)
- User: Uid (ставим галку на Exclude from display по той же причине)
- Content:Nid. При добавлении поля Views спросит о группировке, укажите Count. Таким образом мы получаем количество постов в блоге от определённого пользователя. После указания группировки Count, поле Content:Nid будет содержать только количество записей блога на каждого пользователя.
Вот тут и начинается самое интересное: нужно вывести имя блоггера, рядом показать счётчик постов, и это поле сделать ссылкой на блог пользователя. Я долго ломал голову как это реализовать, но Dealancer подсказал отличное решение: переписать поле. Действительно: у нас есть имя пользователя, его uid и количество его постов. Почему бы не вывести это в таком порядке, в каком нам это необходимо?
Есть замечательная опция у большинства полей: REWRITE RESULTS. Это свойство поля заменять свой текст по определённым правилам, которые описаны в разделе Replacement patterns, если раскрыть свойство REWRITE RESULTS.
В свойствах поля Content:Nid раскроем REWRITE RESULTS:
Поставим галочки на
[x] Rewrite the output of this field
[x] Output this field as a link
Что даст нам возможность изменять содержание поля и ссылку поля.
После расстановки галочек появятся дополнительные опции Text и Link path. Эти поля определяют текст поля и его ссылку соответственно. Они-то нам и нужны.
Нам необходимо вывести в следующем порядке: Автор (кол_во_постов постов), если сказать по-человечески: Admin (25 постов)
Мы помним, что количество постов у нас хранит поле Content:Nid. По этому дадим имя нашему полю:
[name] ([nid] постов)
Чтобы попасть на страницу блога пользователя, нужно перейти по адресу example.com/blog/user_id
А значит ссылка у нас будет вида blog/[uid]
Сохраняем, и вуаля! Осталось только сделать сортировку по убыванию количества постов. То есть чем больше постов, тем выше в списке будет показываться блоггер.
Для этого поставим сортировку по убыванию значения поля Content:nid. Напоминаю, Content:nid хранит количество постов.
COUNT(Content: Nid) (desc)
В конечном итоге вьюшка преобретает следующий вид
Надеюсь мой опыт будет кому нибудь полезен
Спасибо пользователю Dealancer за неоценимую помощь!
Комментарии
Спасибо.Подробно и понятно.
все гениальное просто) спасибо)
Над кажущейся простотой я сидел с бубном полдня Но тем не менее, получилось просто. Хоть и сложно было до этого додуматься
я что-то на 6-ке не могу настроить. может кто подскажет.
выводит имя юзера, ссылку на блог. но вот кол-во записей показывает не правильно.
«Content:Nid. При добавлении поля Views спросит о группировке, укажите Count.»
не совсем понял этот момент. в 6-й версии не нашел этого.
Подскажите плз.
Тоже интересно
для 7-ки же
Вспомнил, для D6 есть отдельный модуль с интеграцией группировки в Views. Может пригодится кому...
нету такого в 7ке.
есть поле Content: Nid; такого - User: Uid нету.
где указывать группировку? в 6ке было, в 7ке не могу найти.
через релэйшн
включите агрегацию и тут же найдете