Wie kann ich entscheiden, zwischen Thema('node', $node) und drupal_render($node->Inhalt) für die programmatische $node-Ausgang
Gegeben $node
ich versuche zu entscheiden zwischen zwei Möglichkeiten, die Ausgabe, dass $node.
entweder
$output = theme('node', $node);
oder
node_build_content($node);
$output = drupal_render($node->content);
Beide scheinen ähnliche Ergebnisse erzielen, aber gibt es etwas, was sollte ich beachten, bevor ich eine Möglichkeit aussuchen, wie über die anderen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Ausgabe ist ähnlich, wenn es keine anderen Module und themes verändern der Ausgabe über das Thema layer.
Aber! Wenn Sie die bypass-Funktion der Thema-Ebene, werden Sie wahrscheinlich beginnen, unerwartetes Verhalten, wenn Sie installieren die Module oder themes und ändern von config-Einstellungen, die über das Thema layer zu ändern, die Knoten ausgegeben.
Kurz, durch Umgehung der Thema-Ebene, Sie bauen Fehler in Ihre Anwendung. Diese Fehler sind wahrscheinlich auftreten, nachdem Sie Ihre Anwendung über jemandem (einem Kunden vielleicht), wer beginnt das ändern von Einstellungen im admin/
Finden Sie die Dekorator-Muster, wenn Sie interessiert sind. Drupal nutzt diese ausgiebig.
http://en.wikipedia.org/wiki/Decorator_pattern
Gut, sortof.
Was Sie wirklich wollen, ist
wenn Sie einfach anrufen node_build_content, und rufen Sie dann theme('node', $node),
hook_nodeapi('alter')
wird nie genannt, noch isthook_link()
.Also wenn ein Modul erwartet wird, zu ändern, die gebaut Knoten, es wird nicht die chance bekommen, und wenn es sein soll, links auf es Sie nicht es entweder.
Zusätzlich können Sie den Anruf
$output = node_view($node, FALSE, FALSE, FALSE);
gibt Sie den Knoten, ohne die links.Finden Sie in der Dokumentation für node_view().
Wenn Sie einen Blick in die Quelle
drupal_render()
es ruft tatsächlichtheme()
selbst, als auch (sofern eine#theme
überschreiben bereitgestellt wird).In Drupal 7, die Sie tun sollten :
Die Lösung, die hier arbeitete war eine Kombination der beiden Techniken. Nur mit
theme('node', $node);
scheint nicht zu funktionieren ohne die Hilfe vonnode_build_content($node);
.Hier ist das Ergebnis lediglich ein Beispiel, mit
theme('node', $node);
.Aber wenn wir das erste tun
node_build_content($node);
vor der Umgang mit den $ - Knoten zu dem Thema Funktion, können Sie sehen, dass die Schaltfläche Formular ist auch gemacht.Daher, die richtige Lösung ist:
Erstes ist zu empfehlen, da es übergeben wird, über das Thema layer.