テンプレートファイルは、ビューオブジェクトに明示的にファイル名を指定しない限り、実行されたモジュール/コントローラ/アクションから自動的に決定されます。テンプレートファイルは3箇所に設置することが可能で、優先順位は下記リスト順となります。
- app/モジュール名/views/コントローラ名/アクション名.tpl
- app/モジュール名/views/アクション名.tpl
- app/views/アクション名.tpl
例えば indexモジュール/indexコントローラ/indexアクション が実行された場合、フレームワークは次の順でファイルが存在するか確認し、見つかった時点でそれをテンプレートファイルとして使用し、探索を止めます。
- app/index/views/index/index.tpl
- app/index/views/index.tpl
- app/views/index.tpl
この仕組みによって、共通のテンプレートファイルを作成することが可能となります。
- app/index/views/index/* (indexコントローラ内共通)
- app/index/views/* (indexモジュール内共通)
- app/views/* (全モジュール共通)
このように自動的にテンプレート名が決済されその指定が省略できるのは楽ですが、時にはそれを変えたい場合もあります。その場合はビューオブジェクトにテンプレートファイル名を明示してあげてください。
class Index_Controllers_Index extends Sabel_Controller_Page
{
public function index()
{
$this->view->setName("test");
}
}
上のようにすると index.tpl ではなく test.tpl が探索され、使用されます。
また、setName()メソッドにはパスを渡すことが可能なため、柔軟なテンプレートファイルの選択を可能にします。
class Index_Controllers_Index extends Sabel_Controller_Page
{
public function index()
{
$this->view->setName("foo/bar/baz");
}
}
※Windows環境の場合はバックスラッシュを用いてください。(XP以降は大丈夫かもしれません)
※スラッシュ・バックスラッシュを環境に依存しないようにするには、
DS 定数を使用してください。
上記の場合、テンプレートファイルの探索は下記のように行われます。
- app/index/views/index/foo/bar/baz.tpl
- app/index/views/foo/bar/baz.tpl
- app/views/foo/bar/baz.tpl