Come nascondere i commenti sotto il nodo, ma non chiuderli?


8

Al momento desidero elencare personalmente i commenti per i nodi (ad esempio da Views), quindi devo nascondere l'elenco dei commenti standard dal modulo di commento principale. Posso farlo così:

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

Ma non impedirà la query DB per i commenti.
Quindi ho trovato alcuni modi folli per ingannare il modulo dei commenti. Ad esempio, per impostare $node->previewproprietà false o per creare una nuova modalità di visualizzazione e sovrascrivere il node/%nodecallback standard .

È davvero così difficile nascondere i commenti sotto il nodo ma consentire comunque di aggiungere un nuovo commento o ho perso qualcosa?

Aggiornamento sull'opzione "Nascosto"

Che dire del valore "nascosto" per il tipo di contenuto:
ho bisogno di un comportamento chiuso / aperto per i miei commenti. Ma se imposto "Nascosto" per il mio tipo di contenuto, i miei nuovi contenuti sono impostati su "Commenti chiusi" anziché nascosti ( ecco il codice ). Un altro problema è che l'utente con il permesso di "pubblicare commenti" non può aggiungere un commento, se i commenti sono nascosti ( ecco il codice ).
Quindi non riesco ad avere l'idea.

Risposta

Soluzione trovata con hook_module_implements_alter(). Molte grazie!


è facile ... modifica il tipo di contenuto, in Impostazioni commento seleziona "Nascosto". questo nasconderà i tuoi commenti
subhojit777

@ subhojit777 OP voglio prevenire la query DB penso.
niksmac,

Risposte:


9

Nei moduli / comment / comment.module possiamo vedere che hook_node_view () (comment_node_view ()) è in esecuzione sulla linea 614. Qui è dove vengono attivate le funzioni per caricare tutti i commenti e collegarli al nodo. I primi 2 insiemi di if () {...} sembrano gestire il modulo per aggiungere commenti e il link azione. Quindi l'ultimo blocco di codice sta finalmente aggiungendo i commenti, che credo sia ciò che in realtà ti preoccupi di più nascondere, e presumo che tu voglia saltare questo per motivi di prestazioni:

// 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);
}

Penso che questo codice sia stupido, perché il modulo di commento non dovrebbe dipendere da una particolare modalità di visualizzazione codificata. Speriamo che questo cambi e diventi un'impostazione nell'interfaccia utente.

Indipendentemente da ciò, ho trovato un post simile che potrebbe interessarti: c'è un modo per fermare il commento di comment_node_view?

Fondamentalmente vuoi usare hook_module_implements_alter () per impedire al modulo di commento di essere in grado di spegnere hook_node_view (). Ecco cosa devi aggiungere al tuo modulo personalizzato:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}

1
Grazie mille! Soprattutto per hook_module_implements_alter!
Kalabro,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.