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->preview
Eigenschaft 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!
Antworten:
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:
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:
quelle
hook_module_implements_alter
!Versuchen Sie einfach, hide () in Ihrer Vorlagendatei oder hook_preprocess_node () zu verwenden:
quelle