J'ai des commentaires sur les nœuds classés par termes. Je dois montrer une vue des termes et s'il y a de nouveaux commentaires dans l'un des nœuds avec lesquels le terme est étiqueté.
Donc, si j'ai ce qui suit:
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
J'ai besoin que ma vue ressemble à ceci:
Term1 – new comments!
Term2
Term3 – new comments!
Term4
J'ai d'abord essayé de créer une vue des commentaires pour inclure le nouveau champ de commentaires et d'utiliser des relations pour afficher les termes. Cependant, si un terme n'a pas de nœuds ou de commentaires (Term4 dans mon exemple), j'ai besoin que le terme soit toujours affiché.
J'ai donc essayé de faire une vue des termes. J'ai ajouté les relations «Terme de taxonomie: Contenu avec terme» et le champ «Contenu: Nouveaux commentaires» qui utilise cette relation. Cela montre le nombre de nouveaux commentaires comme prévu. Cela me donne des résultats dupliqués (que je peux peut-être corriger avec des champs de regroupement) mais de manière inattendue, il masque également les termes qui n'ont pas de commentaires ou de nœuds.
Suis-je en train de procéder correctement et si oui, comment puis-je empêcher que les termes «vides» soient cachés?
MISE À JOUR J'ai mis à jour le noyau D et quelques modules qui avaient de nouvelles versions (mais pas de vues). La vue fonctionne correctement avec la relation «Configurer la relation: Terme de taxonomie: Contenu avec le terme» lorsque le champ est «Contenu: Titre (Titre)». Cependant, lorsque j'ajoute le champ "Contenu: Nouveaux commentaires", les termes qui n'ont aucun commentaire sont masqués.
MISE À JOUR Ive a essayé ce qui suit dans un champ de vues:
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";
}
MISE À JOUR - par «nouveaux commentaires», je veux dire des commentaires que l'utilisateur connecté n'a pas lus. Il s'agit d'un champ standard dans les vues. J'ai besoin de cela plutôt que d'une date arbitraire. Désolé pour toute confusion.
Taxonomy term: Term name
et nonContent: -term vocabulary-
(erreur facile à faire!) 4) Voyez-vous la même chose si vous créez une nouvelle vue Termes de taxonomie à partir de zéro avec uniquement la relation,Taxonomy Term: Term Name
etContent: New Comments
?Réponses:
Cela fonctionne pour moi. J'ai une vue de terme qui affiche le champ du nom du terme et mon code ajoute le nouveau drapeau de commentaire après le nom du terme.
Le code va dans un module personnalisé.
Vous devez remplacer VIEW_NAME par le nom de votre vue et TAXONOMY_FIELD_NAME par le nom de votre champ (comme field_tags par exemple).
la source
history
table contient les données des nœuds de lecture par uid.L'ajout du champ "Contenu: Nouveaux commentaires" ajoute un
INNER JOIN
à la table node_comment_statistics, qui peut potentiellement être la source des problèmes que vous rencontrez. (Par exemple, s'il n'y a aucune entrée pour NodeC, NodeD et NodeE dans node_comment_statistics pour une raison quelconque, les termes ne seront pas affichés car ilsJOIN
sont unINNER
.)La reconstruction de node_comment_statistics est-elle utile?
la source
Voici une esquisse d'une réponse qui vous aidera à vous y rendre, je pense. Commencez par créer une vue des nœuds, puis ajoutez la taxonomie et la dernière heure de commentaire sous forme de champs.
Activez maintenant l'agrégation pour la vue et définissez l'agrégation pour le champ de taxonomie comme "regrouper les résultats", dans la colonne "tid".
Modifiez le paramètre d'agrégation pour le champ de temps de commentaire à "Maximum".
Vous devriez maintenant avoir une vue qui répertorie tous vos termes de taxonomie (au moins ceux qui ont du contenu) avec la dernière date de commentaire. La dernière étape consistera à traiter l'horodatage du commentaire dans un point de vue ou un thème pour le faire afficher comme vous le souhaitez, ce qui devrait être relativement simple.
la source
Vous devez d'abord faire une autre requête, pour récupérer les termes qui ont des nœuds avec un nouveau contenu.
J'ai été aidé par ce fil .
Comme je vous l'ai dit, j'ai mis tout cela dans des champs php; si vous avez le temps, il vaudra mieux le mettre dans un module, dans un views_query_alter ou autre.
Ajoutez un champ php , et dans le code de configuration , allez chercher la liste des termes qui ont du nouveau contenu:
Maintenant, dans le code de sortie , vérifiez que votre terme est dans ce tableau:
C'est le plus léger que je vois, même si la requête peut être lourde si vous avez une grande quantité de nœuds et de commentaires.
EDIT: Je dois rappeler que mettre php dans le sql avec des vues php n'est PAS une bonne pratique , je vous invite à mettre tout cela dans un module personnalisé dans hook_views_query_alter dès que vous le pouvez.
la source