Tengo comentarios sobre los nodos que se clasifican por términos. Necesito mostrar una vista de los términos y, si hay algún comentario nuevo en alguno de los nodos, ese término está etiquetado.
Entonces, si tengo lo siguiente:
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
Necesito que mi vista se vea así:
Term1 – new comments!
Term2
Term3 – new comments!
Term4
Primero intenté hacer una vista de comentarios para incluir el nuevo campo de comentarios y usar relaciones para mostrar los términos. Sin embargo, si un término no tiene nodos o comentarios (Término 4 en mi ejemplo), necesito que el término se siga mostrando.
Entonces intenté hacer una vista de los términos. Agregué las relaciones 'Término de taxonomía: contenido con término' y el campo 'Contenido: nuevos comentarios' que utiliza esta relación. Esto muestra el número de nuevos comentarios como se esperaba. Me da resultados duplicados (que puedo corregir con campos de agrupación) pero inesperadamente también oculta los términos que no tienen comentarios o nodos.
¿Voy por esto de la manera correcta y, si es así, cómo puedo evitar que se oculten los términos 'vacíos'?
ACTUALIZACIÓN He actualizado D core y algunos módulos que tenían nuevas versiones (pero no vistas). La vista funciona bien con la relación de 'Configurar relación: Término de taxonomía: Contenido con término' cuando el campo es 'Contenido: Título (Título)'. Sin embargo, cuando agrego el campo 'Contenido: nuevos comentarios', los términos que no tienen comentarios se ocultan.
ACTUALIZACIÓN He intentado lo siguiente en un campo de vistas:
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";
}
ACTUALIZACIÓN: por "nuevos comentarios" me refiero a los comentarios que el usuario conectado no ha leído. Este es un campo estándar en vistas. Necesito esto en lugar de una fecha arbitraria cortada. Perdón por cualquier confusión.
Taxonomy term: Term name
y noContent: -term vocabulary-
(es un error fácil de hacer!) 4) ¿Ve lo mismo si crea una nueva vista de Términos de taxonomía desde cero con solo la relaciónTaxonomy Term: Term Name
yContent: New Comments
?Respuestas:
Esto funciona para mi. Tengo una vista de término que muestra el campo de nombre del término y mi código agrega la nueva marca de comentario después del nombre del término.
El código va en un módulo personalizado.
Debe cambiar a VIEW_NAME a su nombre de vista y TAXONOMY_FIELD_NAME al nombre de su campo (como field_tags, por ejemplo).
fuente
history
tabla contiene datos de nodos leídos por uid.Al agregar el campo 'Contenido: nuevos comentarios' se agrega un elemento
INNER JOIN
a la tabla node_comment_statistics, que potencialmente puede ser la fuente de los problemas que está experimentando. (Por ejemplo, si por alguna razón no hay entradas para NodeC, NodeD y NodeE en node_comment_statistics, los términos no se mostrarán debido a queJOIN
sonINNER
uno).¿ Ayuda la reconstrucción de node_comment_statistics ?
fuente
Aquí hay un boceto de una respuesta que te llevará la mayor parte del camino, creo. Comience creando una vista de nodos, luego agregue la taxonomía y el último tiempo de comentario como campos.
Ahora active la agregación para la vista y configure la agregación para el campo de taxonomía como "agrupar resultados", en la columna "tid".
Cambie la configuración de agregación para el campo de tiempo de comentario a "Máximo".
Ahora debería tener una vista que enumere todos sus términos de taxonomía (al menos los que tienen contenido) con la última fecha de comentario. El último paso será procesar la marca de tiempo del comentario en un enlace de vistas o tema para que se muestre como lo requiera, lo que debería ser relativamente simple.
fuente
Primero debe realizar otra consulta, para recuperar los términos que tienen nodos con nuevos contenidos.
Este hilo me ayudó .
Como te dije, puse todo esto en los campos php; si tiene tiempo, será mejor ponerlo en un módulo, en views_query_alter o de lo contrario.
Agregue un campo php y, en el código de configuración , vaya a buscar la lista de términos que tienen contenido nuevo:
Ahora en el código de salida , verifique que su término esté en esta matriz:
Esto es lo más ligero que veo, incluso si la consulta puede ser pesada si tiene una gran cantidad de nodos y comentarios.
EDITAR: Tengo que recordar que poner php en el sql con vistas php NO es una buena práctica , lo invito a poner todo eso en un módulo personalizado en hook_views_query_alter tan pronto como sea posible.
fuente