0

Smartyforphpを使用してテンプレートを作成しようとしています。テンプレートを再利用できるようにしたいので、テンプレートを継承し、ブロックを使用して値を置き換えます。サブテンプレートでこれらのブロック値にアクセスする必要がある場合を除いて、これは正常に機能します。smartyの{include}関数を使用してこれらのサブテンプレートを呼び出しています。

例:

テンプレート-親(template.tpl):

<html>
     <head>
         {include file=sub_template.tpl}
     </head>

     <body>
         {block name=title}No Title Provided{/block}
     </body>
</html>

サブテンプレート(sub_template.tpl)

     <title>{block name=title}No Title Provided{/block}</title>

テンプレート-子(template_child.tpl)

     {extends file="template.tpl"}
     {block name=title}My Website!{/block}

サイトを表示すると、出力は次のようになります。

<html>
     <head>
         <title>No Title Provided</title>
     </head>

     <body>
         My Website!
     </body>
</html>

いくつかの調査を行った後、smartyのWebサイトで、{include}関数をダミーの{block}タグで囲むことについてのメモを目にしましたが、これを機能させるにはさまざまなレベルの成功がありました。

注:{include}に含まれるサブテンプレートがあり、それに{block}領域が含まれている場合、{include}自体が周囲の{block}内から呼び出された場合にのみ機能します。最終的な親テンプレートでは、ダミーの{block}が必要になる場合があります。(http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl)

このため、私は試しました:

<html>
     <head>
         {block name=dummy}{include file=sub_template.tpl}{/block}
     </head>

     <body>
         {block name=title}No Title Provided{/block}
     </body>
</html>

これは、サブテンプレートに変更を加えるまでは機能するようです。サブテンプレートに変更が加えられるとすぐに、子に設定されたブロック値への応答が再び停止します。

{include}をダミーブロックタグに配置することについての通知が何を指しているのか誤解しましたか、それともこれはsmartyのバグですか?私は現在キャッシングを使用していませんが、他の考えでは、これはサブテンプレートのキャッシングの問題である可能性があります。

どんな洞察も大歓迎です、ありがとう!

4

1 に答える 1

0

これらのテンプレートがコンパイルされ、templatesディレクトリにキャッシュされるのは事実です。これが、テンプレートディレクトリをクリアすると一時的に問題が修正された理由です。テンプレートキャッシングは、smartyもサポートする明示的キャッシングとは異なります。テンプレートのキャッシュは次のようにオーバーライドできることがわかりました。

$smarty->compile_check = true;
$smarty->force_compile = true;

これにより、開発中に変更後にキャッシュを削除しなくても、テンプレートに変更を加えることができます。

于 2012-09-10T15:27:53.303 に答える