У меня есть комментарии по узлам, которые классифицированы по терминам. Мне нужно показать представление терминов и, если есть какие-либо новые комментарии в любом из узлов, которым этот тег помечен.
Так что, если у меня есть следующее:
Term1
-NodeA (has new comments)
-NodeB (has new comments)
Term2
-NodeC (no new comments)
-NodeD (no new comments)
Term3
-NodeE (no new comments)
-NodeF (has new comments)
Term4
Мне нужно, чтобы мой взгляд выглядел так:
Term1 – new comments!
Term2
Term3 – new comments!
Term4
Сначала я попытался просмотреть комментарии, чтобы включить новое поле комментариев и использовать отношения для отображения терминов. Однако, если у термина нет узлов или комментариев (термин 4 в моем примере), мне нужно, чтобы этот термин все еще отображался.
Поэтому я попытался составить представление об условиях. Я добавил отношения «Термин таксономии: контент с термином» и поле «Контент: новые комментарии», в котором используется эта связь. Это показывает количество новых комментариев, как и ожидалось. Он дает мне дублированные результаты (которые я могу исправить с помощью группировки полей), но неожиданно он также скрывает термины, которые не имеют комментариев или узлов.
Правильно ли я иду по этому пути, и если да, то как я могу остановить скрытие «пустых» терминов?
ОБНОВЛЕНИЕ Я обновил ядро D и несколько модулей, которые имели новые версии (но не представления). Представление прекрасно работает с отношением «Настроить взаимосвязь: термин таксономии: контент с термином», когда в поле «Содержимое: заголовок (заголовок)». Однако, когда я добавляю поле «Содержимое: Новые комментарии», термины без комментариев скрываются.
ОБНОВЛЕНИЕ Ive попробовал следующее в поле зрения:
if(intval($data->node_new_comments) > 0) {
if(!array_key_exists($data->tid, $static)) {
print "new comments !";
$static[$data->tid] = 1;
}
} else {
print "here you do whatever you want when there's no new comment";
}
ОБНОВЛЕНИЕ - под «новыми комментариями» я подразумеваю комментарии, которые вошедший в систему пользователь не прочитал. Это стандартное поле в представлениях. Мне нужно это, а не произвольную дату отсечь. Извините за путаницу.
Taxonomy term: Term name
и нетContent: -term vocabulary-
(легкая ошибка!) 4) Видите ли вы то же самое, если создаете новое представление «Условия таксономии» с нуля только с отношениями,Taxonomy Term: Term Name
иContent: New Comments
?Ответы:
Это работает для меня. У меня есть представление термина, которое показывает поле имени термина, и мой код добавляет новый флаг комментария после названия термина.
Код идет в пользовательском модуле.
Вам нужно изменить на VIEW_NAME имя вашего представления, а TAXONOMY_FIELD_NAME на имя вашего поля (например, field_tags).
источник
history
таблица содержит данные о прочитанных узлах по uid.Добавление поля «Содержимое: Новые комментарии» добавляет
INNER JOIN
в таблицу node_comment_statistics, которая потенциально может быть источником проблем, с которыми вы столкнулись. (Например, если нет никаких записей для NodeC, узлового и NodeE в node_comment_statistics по какой - то причине, условия не будут показаны из - заJOIN
будучиINNER
один.)Помогает ли перестройка node_comment_statistics ?
источник
Вот набросок ответа, который, я думаю, поможет вам в этом. Начните с создания представления узлов, затем добавьте таксономию и время последнего комментария в качестве полей.
Теперь включите агрегацию для представления и установите для столбца «tid» агрегирование для поля таксономии, которое будет «группировать результаты вместе».
Измените параметр агрегации для поля времени комментария на «Максимум».
Теперь у вас должно появиться представление, в котором перечислены все ваши термины таксономии (по крайней мере, те, которые имеют содержание) с датой последнего комментария. Последний шаг будет заключаться в том, чтобы обработать метку времени комментария в хуке представлений или тематике, чтобы он отображался так, как вам нужно, что должно быть относительно просто.
источник
Сначала нужно сделать еще один запрос, чтобы получить термины, в которых есть узлы с новым содержанием.
Мне помогла эта тема .
Как я уже говорил, я помещаю все это в поля php; если у вас есть время, лучше поместить его в модуль, в views_query_alter или в другое.
Добавьте поле php и в коде установки перейдите к списку терминов, которые имеют новое содержание:
Теперь в выходном коде проверьте, что ваш термин находится в этом массиве:
Это самое легкое, что я вижу, даже если запрос может быть тяжелым, если у вас большое количество узлов и комментариев.
РЕДАКТИРОВАТЬ: я должен напомнить, что размещение php в sql с представлениями php НЕ является хорошей практикой , я предлагаю вам как можно скорее поместить все это в пользовательский модуль в hook_views_query_alter.
источник