どこにレンダリングしますか?前処理またはテンプレート?


8

コーディングパフォーマンスは常に改善されており、すべてのページの読み込みを監視して、Webサイトでの読み込み時間を最適化しています。
上記のステートメントを念頭に置いて、レンダリング可能な配列をどこにレンダリングすればよいかという疑問に遭遇しました。

それらをプリプロセッサーでレンダリングする場合、変数を出力するだけなので、テンプレートはかなりきれいに保たれます。

プリプロセッサ:

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

テンプレート:

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

ただし、これが変数を前処理して出力する適切な/最速/最も近い方法であるかどうかはわかりません。

Drupalもこの問題で構成されていないと思います...デフォルトのnode.tpl.php変数ではレンダリングされますが、他のデフォルトのテンプレート(などhtml.php.php)では、変数が出力されるだけです。

誰もがこの問題に最もクリーンで最速の方法で取り組む方法に関するルールやいくつかのヒントやアドバイスを持っていますか?


2
この質問はかなり主観的です。一般的なルールは、計算は前処理関数で行われ、テンプレートファイルでレンダリングされることです。node_view()フィールドのレンダリングになぜ使用しているのかは明らかではありません。ノードテンプレートでは、フィールドはそのようにレンダリングされません。
kiamlaluno

情報をありがとう。では、なぜDrupalはでレンダリングしてnode.tpl.php印刷するのhtml.tpl.phpですか?このnode_view()問題にどのように取り組みますか?
Michiel、2015

回答:


7

Drupalはこの問題でも構成されていないと思います...デフォルトのnode.tpl.php変数はレンダリングされますが、他のデフォルトのテンプレート(html.php.phpなど)では、変数が出力されるだけです。

それは正しくありません。見てみると、/にtemplate_preprocess_html()は何も実行されていないことがわかります。したがって、レンダリングする必要がないため、html.tpl.phpの変数はレンダリングされるのではなく印刷されるだけです。すべての変数はすでに文字列であり、テンプレートの作成にレンダー配列は使用されていません。render()drupal_render()

逆に、node.tpl.phpのノードコンテンツレンダー配列です。したがって、レンダリングする必要がある部分は、render()印刷するだけでなく、実行する必要があります。

render()別の方法で行う特別な理由がない限り、前処理関数ではなくテンプレートでコアを使用する例に従うようにしたいと思います。

パフォーマンスの観点から見ると、その違いはごくわずかですが、サイトとハードウェアのコンテキストでコードをプロファイリングすることが唯一の確実な方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.