2

tpl ファイルが含まれるたびに、システムは最初にサイト固有のバージョンのファイルを探し、サイト固有のバージョンが存在しない場合は標準バージョンにフォールバックします。そのため、「customer/main/test1.tpl」をインクルードします。サイトが Google の場合、システムは最初に「customer/main/google_test1.tpl」を探し、そのファイルが存在しない場合は「customer/main/test1.tpl」にフォールバックします。

注: Smarty 2.6.x

4

1 に答える 1

2

組み込みのテンプレート ディレクトリ カスケードについて知っていましたか? addTemplateDirsetTemplateDirを使用すると、複数のディレクトリを指定できます。

$smarty->setTemplateDir(array(
  'google' => 'my-templates/google/',
  'default' => 'my-templates/default/',
));

$smarty->display('foobar.tpl');

Smarty は最初に検索を試み、見つからmy-templates/google/foobar.tplない場合は検索を試みmy-templates/default/foobar.tplます。これを使用して、完全なテンプレート カスケードを構築できます。


同じカスケード レベルに多くの要素がある場合、これはあまり役に立ちません。default.tpl の他に、google、yahoo、bing 用の特定のテンプレートがあるとします。ソリューションには、デフォルトのテンプレート ハンドラー関数が含まれる場合があります。Smarty が見つからないテンプレートに遭遇するたびに、このコールバックは最後の手段として実行されます。フォールバックとして使用するテンプレート ファイル (またはテンプレート リソース) を指定できます。

したがって、 {include}、{extend}、->fetch()、->display() が可能site_google.tplです。ファイルが存在する場合、すべて問題ありません。そうでない場合は、コールバックを に置き換え_google_default、デフォルト テンプレートにフォールバックすることができます。


template_dir カスケードもデフォルトのテンプレート ハンドラー関数も適用できない場合は、カスタム テンプレート リソースを掘り下げる必要があります。

于 2012-06-06T08:47:05.780 に答える