テンプレートファイルの選択 | Controller & Action

テンプレートファイルは、ビューオブジェクトに明示的にファイル名を指定しない限り、実行されたモジュール/コントローラ/アクションから自動的に決定されます。テンプレートファイルは3箇所に設置することが可能で、優先順位は下記リスト順となります。
  1. app/モジュール名/views/コントローラ名/アクション名.tpl
  2. app/モジュール名/views/アクション名.tpl
  3. app/views/アクション名.tpl

例えば indexモジュール/indexコントローラ/indexアクション が実行された場合、フレームワークは次の順でファイルが存在するか確認し、見つかった時点でそれをテンプレートファイルとして使用し、探索を止めます。
  1. app/index/views/index/index.tpl
  2. app/index/views/index.tpl
  3. app/views/index.tpl

この仕組みによって、共通のテンプレートファイルを作成することが可能となります。
  1. app/index/views/index/* (indexコントローラ内共通)
  2. app/index/views/* (indexモジュール内共通)
  3. 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 定数を使用してください。

上記の場合、テンプレートファイルの探索は下記のように行われます。
  1. app/index/views/index/foo/bar/baz.tpl
  2. app/index/views/foo/bar/baz.tpl
  3. app/views/foo/bar/baz.tpl