Où rendre? Prétraitement ou modèle?

8

Nous améliorons constamment nos performances de codage et nous surveillons chaque chargement de page pour optimiser les temps de chargement et de rendu sur nos sites Web.
Au-dessus de la déclaration à l'esprit, je suis tombé sur la question où devrions-nous rendre les tableaux rendables?

Si vous les rendez dans votre préprocesseur, le modèle reste assez soigné puisque vous n'imprimez que des variables.

Préprocesseur:

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

Modèle:

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

Cependant, je ne suis pas sûr que ce soit le moyen approprié / le plus rapide / le plus soigné pour prétraiter et imprimer des variables.

Drupal ne consiste pas non plus dans cette affaire ... Dans les node.tpl.phpvariables par défaut sont rendues tandis que dans d'autres modèles par défaut (comme html.php.php), les variables sont juste imprimées.

Quelqu'un a-t-il une règle et / ou des trucs et conseils sur la façon de résoudre ce problème de la manière la plus propre et la plus rapide?

Michiel
la source
2
Cette question est plutôt subjective. La règle générale est que le calcul se fait dans la fonction de prétraitement et le rendu dans le fichier modèle. Il n'est pas clair pourquoi vous utilisez node_view()pour rendre un champ; les champs ne sont pas rendus de cette façon dans un modèle de nœud.
kiamlaluno
Merci pour l'info. Alors pourquoi le rendu Drupal est-il dans node.tpl.phpet l'impression html.tpl.php? Comment aborderiez-vous le node_view()problème?
Michiel

Réponses:

7

Drupal ne consiste pas non plus dans cette affaire ... Je suppose que dans les variables node.tpl.php par défaut sont rendues tandis que dans d'autres modèles par défaut (comme html.php.php), les variables sont juste imprimées.

Ce n'est pas tout à fait juste. Si vous regardez, template_preprocess_html()vous pouvez voir que rien ne passe par render()/ drupal_render(). Donc, tout simplement, les variables dans html.tpl.php sont imprimées plutôt que rendues car elles n'ont pas besoin d'être rendues. Tous les vars sont déjà des chaînes et aucun tableau de rendu n'a été utilisé pour créer le modèle.

Inversement, le contenu du nœud dans node.tpl.php est un tableau de rendu. Donc, toutes les parties de celui-ci qui doivent être rendues doivent être parcourues render()et pas seulement imprimées.

Je serais tenté de suivre l'exemple de core d'utilisation render()dans des modèles, pas dans des fonctions de prétraitement, à moins que vous n'ayez une raison spécifique de le faire différemment.

Du point de vue des performances, la différence serait certainement négligeable, mais le profilage du code dans le contexte de votre site et de votre matériel est le seul moyen d'être certain.

Clive
la source