Wie verstecke ich Kommentare unter dem Knoten, schließe sie aber nicht?

8

Eigentlich möchte ich Kommentare für Knoten selbst auflisten (z. B. nach Ansichten), daher muss ich die Standardkommentarliste vor dem Kernkommentarmodul ausblenden. Ich kann es so machen:

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

Die DB-Abfrage nach Kommentaren wird jedoch nicht verhindert.
Also habe ich einige verrückte Wege gefunden, um das Kommentarmodul auszutricksen. Zum Beispiel, um eine gefälschte $node->previewEigenschaft festzulegen oder einen neuen Ansichtsmodus zu erstellen und einen Standardrückruf zu überschreiben node/%node.

Ist es wirklich so schwierig, Kommentare unter dem Knoten auszublenden und trotzdem neue Kommentare hinzuzufügen, oder habe ich etwas verpasst?

Update zur Option "Versteckt"

Was ist mit dem Wert "Versteckt" für den Inhaltstyp:
Ich benötige ein Schließen / Öffnen-Verhalten für meine Kommentare. Wenn ich jedoch für meinen Inhaltstyp "Versteckt" einstelle, werden meine neuen Inhaltselemente auf "Kommentare geschlossen" anstatt auf "Ausgeblendet" gesetzt ( hier ist der Code ). Ein weiteres Problem ist, dass Benutzer mit der Berechtigung zum "Posten von Kommentaren" keinen Kommentar hinzufügen können, wenn Kommentare ausgeblendet sind ( hier ist der Code ).
Ich kann also nicht auf die Idee kommen.

Antworten

Lösung gefunden mit hook_module_implements_alter(). Vielen Dank!

Kalabro
quelle
Es ist einfach ... den Inhaltstyp zu bearbeiten, wählen Sie unter Kommentareinstellungen "Versteckt". Dies wird Ihre Kommentare verbergen
subhojit777
@ subhojit777 OP möchte DB-Abfrage verhindern, denke ich.
Niksmac

Antworten:

9

In modules / comment / comment.module können wir sehen, dass hook_node_view () (comment_node_view ()) in Zeile 614 ausgeführt wird. Hier werden die Funktionen ausgelöst, um alle Kommentare zu laden und an den Knoten anzuhängen. Die ersten beiden Sätze von if () {...} scheinen das Formular zum Hinzufügen von Kommentaren und den Aktionslink zu verarbeiten. Dann fügt der letzte Codeblock endlich die Kommentare hinzu, von denen ich glaube, dass Sie sich am meisten Sorgen um das Verstecken machen, und ich gehe davon aus, dass Sie dies aus Leistungsgründen überspringen möchten:

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

Ich denke, dieser Code ist albern, weil das Kommentarmodul nicht von einem bestimmten fest codierten Ansichtsmodus abhängig sein sollte. Hoffentlich ändert sich dies und wird zu einer Einstellung in der Benutzeroberfläche.

Unabhängig davon habe ich einen ähnlichen Beitrag gefunden, der Sie interessieren könnte: Gibt es eine Möglichkeit, das Auslösen von comment_node_view zu verhindern?

Grundsätzlich möchten Sie hook_module_implements_alter () verwenden, um zu verhindern, dass das Kommentarmodul hook_node_view () auslösen kann. Folgendes müssen Sie Ihrem benutzerdefinierten Modul hinzufügen:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}
Charlie Schliesser
quelle
1
Vielen Dank! Besonders für hook_module_implements_alter!
Kalabro