Estamos constantemente aprimorando nosso desempenho de codificação e monitorando cada carregamento de página para otimizar os tempos de renderização e renderização em nossos sites.
Acima da afirmação em mente, me deparei com a questão de onde devemos renderizar as matrizes renderizáveis?
Se você renderizá-los em seu pré-processador, o modelo permanecerá bem organizado, pois você está apenas imprimindo variáveis.
Pré-processador:
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>
No entanto, não tenho certeza se essa é a maneira adequada / mais rápida / mais limpa de pré-processar e imprimir variáveis.
Drupal também não está consistindo nesse assunto ... As node.tpl.php
variáveis padrão são renderizadas enquanto em outros modelos padrão (como html.php.php
), as variáveis são apenas impressas.
Alguém tem uma regra e / ou algumas dicas e conselhos sobre como lidar com esse problema da maneira mais limpa e rápida?
fonte
node_view()
para renderizar um campo; Os campos não são renderizados dessa maneira em um modelo de nó.node.tpl.php
e imprimindohtml.tpl.php
? Como você resolveria onode_view()
problema?Respostas:
Isto não está completamente correto. Se você olhar,
template_preprocess_html()
verá que nada é executado através derender()
/drupal_render()
. Então, simplesmente as variáveis em html.tpl.php são impressas, e não renderizadas, porque não precisam ser renderizadas. Todos os vars já são cadeias de caracteres e nenhuma matriz de renderização foi usada para criar o modelo.Por outro lado, o conteúdo do nó em node.tpl.php é uma matriz de renderização. Portanto, todas as partes que precisam ser renderizadas precisam ser processadas
render()
e não apenas impressas.Eu ficaria tentado a seguir o exemplo principal do uso
render()
em modelos, não nas funções de pré-processo, a menos que você tenha um motivo específico para fazer isso de maneira diferente.Do ponto de vista do desempenho, a diferença certamente seria insignificante, mas criar um perfil do código no contexto do site e do hardware é a única maneira de ter certeza.
fonte