Estamos mejorando constantemente nuestro rendimiento de codificación y estamos monitoreando cada carga de página para optimizar los tiempos de carga y representación en nuestros sitios web.
Por encima de la declaración en mente, me topé con la pregunta de dónde deberíamos renderizar las matrices renderizables.
Si los procesa en su preprocesador, la plantilla se mantiene bastante ordenada ya que solo está imprimiendo variables.
Preprocesador:
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']);
}
Modelo:
<div class="faq_image">
<?php print $faq_image; ?>
</div>
Sin embargo, no estoy seguro de que esta sea la forma adecuada / más rápida / más ordenada de preprocesar e imprimir variables.
Drupal tampoco consiste en este asunto, supongo ... En las node.tpl.php
variables predeterminadas se representan, mientras que en otras plantillas predeterminadas (como html.php.php
), las variables se imprimen.
¿Alguien tiene una regla y / o algunos consejos y sugerencias sobre cómo abordar este problema de la manera más limpia y rápida?
fuente
node_view()
para representar un campo; los campos no se representan de esa manera en una plantilla de nodo.node.tpl.php
e imprimiendohtml.tpl.php
? ¿Cómo abordarías elnode_view()
problema?Respuestas:
Eso no es del todo bien. Si observas
template_preprocess_html()
, puedes ver que nada se ejecuta a través derender()
/drupal_render()
. Así que, simplemente, las variables en html.tpl.php se imprimen en lugar de representarse porque no es necesario representarlas. Todos los vars ya son cadenas, y no se utilizaron matrices de renderizado para construir la plantilla.Por el contrario, el contenido del nodo en node.tpl.php es una matriz de representación. Por lo tanto, cualquier parte de ella que deba renderizarse debe ejecutarse
render()
y no solo imprimirse.Me sentiría tentado a seguir el ejemplo central de uso
render()
en plantillas, no en funciones de preproceso, a menos que tenga una razón específica para hacerlo de manera diferente.Desde el punto de vista del rendimiento, la diferencia seguramente sería insignificante, pero perfilar el código en el contexto de su sitio y hardware es la única forma de estar seguro.
fuente