要するにはい
Kohana 3.0 で作成したサイトで自分でテンプレートを使用しています。その基本的なセットアップを説明しようと思います。テンプレートを使用するには、コントローラーを拡張する必要がController_Template
あり、内部の$template
変数は、ビュー フォルダーに読み込むテンプレート ページを指定するため、controller_template クラスを拡張して読み込むテンプレートを管理する独自のマスター コントローラー クラスを作成しました。以下では、デフォルトのテンプレートの名前が単なるテンプレートであることを確認できます。そのためtemplate.php
、コントローラーで指定されていない場合はビュー フォルダーから読み込まれます。
(ダムダウン) のクラス定義を持つ master.php マスター コントローラーがあります。
abstract class Controller_Master extends Controller_Template
{
public $template = 'template'; // Default template
public function before()
{
// Set a local template variable to what template the controller wants to use, by default 'template'
$template = $this->template;
// This is important and for abstraction, since we're extending a class and its functions we need to make sure we still execute its before(); function
// This will load the view you need from /views/template.php or /views/template2.php depending on what your controller specifies into $this->template
parent::before();
// Check which template our code/controller needs to use
if ($template == 'template')
{
$this->template->header = View::factory('template/head'); // Loads default header file from our views folder /views/template/head.php
$this->template->content = View::factory('template/index'); // Loads default index file from our views folder /views/template/index.php
$this->template->footer = View::factory('template/footer'); // Loads default footer file from our views folder /views/template/footer.php
return;
} elseif ($template == 'template2')
{
$this->template->header = View::factory('template2/head'); // Loads default header file from our views folder /views/template2/head.php
$this->template->sidebar = View::factory('template2/sidebar'); // Loads default sidebar file from our views folder /views/template2/sidebar.php
$this->template->content = View::factory('template2/index'); // Loads default index file from our views folder /views/template2/index.php
$this->template->footer = View::factory('template2/footer'); // Loads default footer file from our views folder /views/template2/footer.php
return;
}
}
}
次のクラス定義を持つuser.phpユーザーコントローラーがあります
// This is important, make sure your controllers extend your master controller class
class Controller_User extends Controller_Master
{
// In this example this user controller just needs to use the default controller
// so nothing needs to be changed on it besides extending our Controller_Master
// Example action inside the user class on how to load different content into your template instead of the default index page.
function action_login()
{
// Load the login view page from /views/template/forms/login.php
$this->template->content = View::factory('template/forms/login');
}
}
ここで、別のテンプレートを使用する必要があるコントローラーがあるとします。たとえば、次のクラス定義を持つphoto.phpフォト コントローラーがあるとします。
// This is important, make sure your controllers extend your master controller class
class Controller_Photo extends Controller_Master
{
// Since this controller needs to use a different template we extend the before() function
// to override the $template variable we created in master to use 'template2'
function before()
{
$this->template = 'template2';
}
}
/views/template.phpのようなものが含まれています
<body>
<div id="header">
<?= $header; ?>
</div>
<div id="content">
<?= $content; ?>
</div>
<div id="footer">
<?= $footer; ?>
</div>
</body>
/views/templat2e.phpには、次のような異なるレイアウトが含まれています
<body>
<div id="header">
<?= $header; ?>
</div>
<div id="sidebar">
<?= $sidebar; ?>
</div>
<div id="content">
<?= $content; ?>
</div>
<div id="footer">
<?= $footer; ?>
</div>
</body>
$header
、$sidebar
、$content
、およびは、マスターコントローラー$footer
に設定されているか、コントローラーのコードによって上書きされています$this->template->header
。
これで、Kohana でテンプレートを操作する方法が十分に説明されていることを願っています。