いろいろPHP~備忘録~

WEBエンジニアによる記録

勉強になったことを記録

【FuelPHP】Templateを利用して、Viewの共通テンプレートを作成

概要

FuelPHPのTemplateを利用して、Viewのヘッダー、フッターなどの共通テンプレートを作成します。
コンテンツはアクション毎に変更をします。

1.テンプレートを作成

\fuelphp\fuel\app\views\ 配下にテンプレート用のファイル(template.php)を作成します。

<!DOCTYPE html>
<html>  
    <head>
    </head>
    <body>        
        <header>
            // header.phpファイルを読み込む
            <?php echo $header; ?>            
        </header>       
        <main>
            // 各アクションの内容を読み込む
            <?php echo $content; ?>           
        </main>       
        <footer>
            // footer.phpファイルを読み込む
            <?php echo $footer; ?>   
        </footer>    
    </body>
</html>

2.ヘッダー、フッター用のテンプレートを作成

\fuelphp\fuel\app\views\ 配下にフォルダを作成して、ヘッダー、フッター用のテンプレートを作成します。
\fuelphp\fuel\app\views\parts\header.php
\fuelphp\fuel\app\views\parts\footer.php

// header.php

<div>
  <?php echo 'ヘッダー表示'; ?>
</div>
// footer.php

<div>
  <?php echo 'フッター表示'; ?>
</div>

3.共通Controllerを作成

Controller_Templateを継承したController_Baseを作成します。
今後、ここで共通なものを一箇所にまとめることができます。
\fuel\app\classes\controller\ 配下にbase.phpを作成します。

<?php

class Controller_Base extends Controller_Template
{
    public function before()
    {
        // テンプレートを動作させるために必要
        parent::before();
        //header.phpをテンプレートの$headerとbindさせる。
        $this->template->header = View::forge('parts/header');
        //footer.phpをテンプレートの$footerとbindさせる。
        $this->template->footer = View::forge('parts/footer');
    }

    public function after($response)
    {
        // 自身のレスポンスオブジェクトを作成する場合は必要なし
        $response = parent::after($response);
    // after() は確実に Response オブジェクトを返すようにする。
        return $response; 
    }
}

4. Controller_Baseを継承したコントローラーを作成

\fuel\app\classes\controller\ 配下にwelcome.phpを作成します。

<?php

class Controller_Hello extends Controller_Base
{
    public function action_index()
    {
        //template.phpのcontentとアクション毎のviewをbindさせる
        $this->template->content = View::forge('welcome/index');
    }
}

5.Viewファイルを作成

\fuelphp\fuel\app\views\ 配下にフォルダを作成して、index.phpを作成します。

\fuelphp\fuel\app\views\welcome\index.php

<div>
  メインコンテンツ
</div>


以上で、Viewのヘッダー、フッターなどの共通テンプレートの作成は完了です。
また、アクション毎にコンテンツの変更が可能になりました。