Comment masquer les commentaires sous le nœud, mais pas les fermer?

8

En fait, je veux lister les commentaires pour les nœuds moi-même (par Views, par exemple), donc je dois masquer la liste des commentaires standard du module de commentaires principal. Je peux le faire comme ça:

  unset($node['comments']['comments']);

Mais cela n'empêchera pas la requête DB pour les commentaires.
J'ai donc trouvé des façons folles de tromper le module de commentaires. Par exemple, pour définir une fausse $node->previewpropriété ou pour créer un nouveau mode d'affichage et remplacer le node/%noderappel standard .

Est-il vraiment si difficile de masquer les commentaires sous le nœud mais de permettre d'ajouter de nouveaux commentaires, ou j'ai raté quelque chose?

Mise à jour sur l'option «Hidden»

Qu'en est-il de la valeur «cachée» pour le type de contenu:
j'ai besoin d'un comportement de fermeture / ouverture pour mes commentaires. Mais si je mets «Masqué» pour mon type de contenu, mes nouveaux éléments de contenu sont mis à «Commentaires fermés» au lieu de masqués ( voici le code ). Un autre problème est que l'utilisateur autorisé à «poster des commentaires» ne peut pas ajouter de commentaire, si les commentaires sont masqués ( voici le code ).
Je ne comprends donc pas l'idée.

Réponse

Solution trouvée avec hook_module_implements_alter(). Merci beaucoup!

kalabro
la source
c'est facile ... modifiez le type de contenu, sous les paramètres de commentaire, sélectionnez "Caché". cela
masquera
@ subhojit777 OP veut empêcher la requête DB je pense.
niksmac

Réponses:

9

Dans les modules / comment / comment.module, nous pouvons voir que hook_node_view () (comment_node_view ()) fonctionne sur la ligne 614. C'est là que les fonctions se déclenchent pour charger tous les commentaires et les attacher au nœud. Les 2 premiers ensembles de if () {...} semblent gérer le formulaire d'ajout de commentaire et le lien d'action. Ensuite, le dernier bloc de code ajoute enfin les commentaires, ce qui, selon moi, est ce qui vous préoccupe le plus, et je suppose que vous voulez que cela soit ignoré pour des raisons de performances:

// Only append comments when we are building a node on its own node detail
// page. We compare $node and $page_node to ensure that comments are not
// appended to other nodes shown on the page, for example a node_reference
// displayed in 'full' view mode within another node.
if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
  $node->content['comments'] = comment_node_page_additions($node);
}

Je pense que ce code est idiot, car le module de commentaire ne devrait pas dépendre d'un mode d'affichage codé en dur particulier. Espérons que cela va changer et devenir un paramètre dans l'interface utilisateur.

Quoi qu'il en soit, j'ai trouvé un article similaire qui pourrait vous intéresser: existe-t-il un moyen d'empêcher comment_node_view de tirer?

Fondamentalement, vous souhaitez utiliser hook_module_implements_alter () pour empêcher le module de commentaire de déclencher hook_node_view (). Voici ce que vous devez ajouter à votre module personnalisé:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}
Charlie Schliesser
la source
1
Merci beaucoup! Surtout pour hook_module_implements_alter!
kalabro