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.php
variables 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?
la source
node_view()
pour rendre un champ; les champs ne sont pas rendus de cette façon dans un modèle de nœud.node.tpl.php
et l'impressionhtml.tpl.php
? Comment aborderiez-vous lenode_view()
problème?Réponses:
Ce n'est pas tout à fait juste. Si vous regardez,
template_preprocess_html()
vous pouvez voir que rien ne passe parrender()
/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.
la source