Wo rendern? Vorverarbeitung oder Vorlage?

8

Wir verbessern ständig unsere Codierungsleistung und überwachen das Laden jeder Seite, um das Laden und Rendern unserer Websites zu optimieren.
Über die Aussage hinaus bin ich auf die Frage gestoßen, wo wir die renderbaren Arrays rendern sollen.

Wenn Sie sie in Ihrem Präprozessor rendern, bleibt die Vorlage ziemlich ordentlich, da Sie nur Variablen drucken.

Präprozessor:

function template_preprocess_node__faq(&$variables) {
    $node = node_load($variables['nid']);
    $node_style = node_view($node, $variables['view_mode']);

    $faq_sets = array(
      '#theme'  => 'my_module_faq_set',
      '#sets'   => $variables['field_faq_set'],
    );

    $variables['faq_image']   = render($node_style['field_faq_image']);
}

Vorlage:

<div class="faq_image">
     <?php print $faq_image; ?>
</div>

Ich bin mir jedoch nicht sicher, ob dies der richtige / schnellste / sauberste Weg ist, Variablen vorzuverarbeiten und zu drucken.

Drupal besteht auch nicht in dieser Angelegenheit, denke ich ... In den Standardvariablen node.tpl.phpwerden gerendert, während in anderen Standardvorlagen (wie html.php.php) nur Variablen gedruckt werden.

Hat jemand eine Regel und / oder einige Tipps und Ratschläge, wie dieses Problem am saubersten und schnellsten gelöst werden kann?

Michiel
quelle
2
Diese Frage ist eher subjektiv. Die allgemeine Regel lautet, dass die Berechnung in der Vorverarbeitungsfunktion und das Rendern in der Vorlagendatei erfolgt. Es ist nicht klar, warum Sie node_view()ein Feld rendern. Felder werden in einer Knotenvorlage nicht so gerendert.
Kiamlaluno
Danke für die Information. Warum wird dann Drupal gerendert node.tpl.phpund gedruckt html.tpl.php? Wie würden Sie das node_view()Problem angehen ?
Michiel

Antworten:

7

Drupal besteht auch nicht in dieser Angelegenheit, denke ich ... In der Standarddatei node.tpl.php werden Variablen gerendert, während in anderen Standardvorlagen (wie html.php.php) nur Variablen gedruckt werden.

Das ist nicht ganz richtig. Wenn Sie sich das ansehen template_preprocess_html(), können Sie sehen, dass nichts durch render()/ läuft drupal_render(). So ganz einfach die Variablen in html.tpl.php eher gedruckt als gemacht , weil sie nicht brauchen gerendert werden. Alle Variablen sind bereits Zeichenfolgen, und zum Erstellen der Vorlage wurden keine Render-Arrays verwendet.

Umgekehrt ist der Knoteninhalt in node.tpl.php ist ein Array machen. Alle Teile davon, die gerendert werden müssen, müssen durchlaufen render()und nicht nur gedruckt werden.

Ich wäre versucht, dem Beispiel von Core für die Verwendung render()in Vorlagen und nicht in Vorverarbeitungsfunktionen zu folgen , es sei denn, Sie haben einen bestimmten Grund, dies anders zu tun.

Aus Sicht der Leistung wäre der Unterschied sicherlich vernachlässigbar, aber die Profilerstellung des Codes im Kontext Ihrer Site und Hardware ist der einzige Weg, um sicher zu sein.

Clive
quelle