Dove rendere? Preprocesso o modello?


8

Stiamo migliorando costantemente le nostre prestazioni di codifica e stiamo monitorando ogni caricamento della pagina per ottimizzare i tempi di caricamento e rendering nei nostri siti Web.
Sopra la dichiarazione in mente, mi sono imbattuto nella domanda dove dovremmo rendere le matrici renderizzabili?

Se li rendi nel tuo preprocessore, il modello rimane piuttosto pulito poiché stai solo stampando le variabili.

preprocessore:

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']);
}

Modello:

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

Tuttavia, non sono sicuro che questo sia il modo corretto / più veloce / più accurato per preelaborare e stampare le variabili.

Drupal non consiste in questo caso, immagino ... Nelle node.tpl.phpvariabili predefinite vengono visualizzate mentre in altri modelli predefiniti (come html.php.php), le variabili vengono appena stampate.

Qualcuno ha una regola e / o alcuni suggerimenti e consigli su come affrontare questo problema nel modo più pulito e veloce?


2
Questa domanda è piuttosto soggettiva. La regola generale è che il calcolo viene eseguito nella funzione di preelaborazione e il rendering nel file modello. Non è chiaro il motivo per cui si sta utilizzando node_view()per il rendering di un campo; i campi non vengono visualizzati in questo modo in un modello di nodo.
kiamlaluno

Grazie per le informazioni. Allora perché il rendering Drupal è in node.tpl.phpe la stampa in html.tpl.php? Come affronteresti il node_view()problema?
Michiel,

Risposte:


7

Drupal non consiste in questa faccenda, o immagino ... Nelle variabili node.tpl.php predefinite sono visualizzate mentre in altri modelli predefiniti (come html.php.php), le variabili sono appena stampate.

Non è del tutto esatto. Se guardi template_preprocess_html()puoi vedere che non viene eseguito nulla render()/ drupal_render(). Quindi semplicemente le variabili in html.tpl.php vengono stampate anziché renderizzate perché non hanno bisogno di essere renderizzate. Tutti i var sono già stringhe e non sono stati utilizzati array di rendering per creare il modello.

Al contrario, il contenuto del nodo in node.tpl.php è un array di rendering. Quindi tutte le parti di esso che devono essere renderizzate devono essere esaminate render()e non solo stampate.

Sarei tentato di seguire l'esempio di base dell'uso render()nei template, non nelle funzioni di pre-elaborazione, a meno che tu non abbia un motivo specifico per farlo diversamente.

Da un punto di vista delle prestazioni la differenza sarebbe sicuramente trascurabile, ma la profilazione del codice nel contesto del tuo sito e dell'hardware è l'unico modo per esserne certi.

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.