FuelPHPのテーマクラスの概要(実践編その9)

FuelPHPのテーマクラス』でテーマクラスについて調べてみましたが、いまいちニュアンスがつかめないような状況です。今日は、テーマクラスを実際に使用してみたいと思います。あれこれ試行錯誤してたどり着いた結論ですが、実際使い方が間違えているような気もします。そこのところも併せて検証してみたいと思います。

1. まず、テーマクラスのConfigファイルを作成します。下記のように記述しました。ビューファイルをドキュメントルートに置くのには抵抗がありますので、アプリケーション内に設置することにしました。

app/config/theme.php

<?php
 return array(
 'active' => 'default',
 'fallback' => 'default',
 'paths' => array(
 APPPATH.'themes',
 ),
 'assets_folder' => 'assets',
 'view_ext' => '.html',
 'require_info_file' => false,
 'info_file_name' => 'themeinfo.php',
 );

2. それでは、appフォルダの直下にthemesフォルダを作成し、その下にdefaultフォルダを作成します。このdefaultフォルダは使わなくても作成しておく必要があります。

3. まず、コントローラを作成します。下記のように記述します。

app/classes/controller/sample.php

<?php
 class Controller_Sample extends Controller{
 public function action_index(){
 $theme=\Theme::forge();
 return Response::forge($theme->view('sample/index'));
 }
 }

4. ビューファイルを作成して下記のように記述します。

app/views/sample/index.php

<div id="index" style="background-color:#00FF00">
 <p>これは、indexページです。</p>
 <h3>app/views/sample/index.php</h3>
 </div>

5. ブラウザで確認してみます。

http://ドメイン名/sample/

6. つまり、themesフォルダを作成しても、app/themes/default内にファイルがなければ、普通にapp/viewsフォルダから、ビューファイルを捜して表示します。次に、今度は、同じ名前でthemes/defaultフォルダ内にビューファイルを作成してみます。

app/themes/default/sample/index.php

<div id="index" style="background-color:#CF6">
 <p>これは、indexページです。</p>
 <h3>app/themes/sample/index.php</h3>
 </div>

7. 再度ブラウザで確認してみます。

http://ドメイン名/sample/

7. 同じアドレスでアクセスしても、今度は、themesフォルダ内のファイルを表示しています。つまりこの検証から分かることは、FuelPHPのテーマクラスは、themesフォルダのactiveに指定しているフォルダ名(default)内にファイルがある場合は、そのファイルを表示し、ファイルが無い場合は、viewsフォルダから同じ名前のファイルを捜してきて表示します。

8. 次にviews内にtemplateファイルを作成してみます。

app/views/sample/template.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>テンプレートファイル</title>
</head>
<body style="background-color:#C9C">
<h1><?=$title?></h1>
<h3>これは、views内のテンプレートファイルです。</h3>
<p>app/views/sample/template.php</p>
<?=$content?>
</body>
</html>

9. コントローラを下記のように修正します。

app/classes/controller/sample.php

<?php
class Controller_Sample extends Controller{
public function action_index(){
//テーマクラスのインスタンス化
$theme=\Theme::instance();
//テーマにテンプレートをセット
$theme->set_template('sample/template');
//テーマのテンプレートにタイトルをセット
$theme->get_template()->set('title','Winroad徒然草');
//テーマのタイトルにビューをセット
$theme->get_template()->set('content',$theme->view('sample/index'));
return $theme;
}
}

9. ブラウザで表示してみます。views内のテンプレートファイルの中にviews内のビューファイルが表示されています。

http://ドメイン名/sample/

10. 次に、themesフォルダ内に同様にテンプレートファイルとビューファイルを作成してみます。

app/themes/sample/template.php 

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>テンプレートファイル</title>
</head>
<body style="background-color:#FFFF00">
<h1><?=$title?></h1>
<h3>これは、themes内のテンプレートファイルです。</h3>
<p>app/themes/sample/template.php</p>
<?=$content?>
</body>
</html>

app/themes/sample/index.php

<div id="index" style="background-color:#CF6">
<p>これは、themes内のindexページです。</p>
<h3>app/themes/sample/index.php</h3>
</div>

11. 再度同じアドレスでアクセスしてみます。今度は、themes内のテンプレートファイルの中にthemes内のビューファイルが表示されています。

http://ドメイン名/sample/

12. 今回の検証で、ぼんやりですが、FuelPHPのテーマクラスがわかりかけてきました。使い方としては、コントローラでテーマクラスを利用してサイトを作成することを前提にコードを作成しておけば、themes/defaultのフォルダを作成しておくだけで、通常のビューファイル(app/views)を使用することが出来ます。そして、befofeメソッドなどを使用して、何かの条件によって使用するビューファイルやテンプレートファイルを簡単に使い分けることが出来るようになります。詳細な使い方を覚えればかなり便利に使えそうですが、partialやchromeの使い方がいまいち、はっきりと分かりません。CakePHPのテーマはもっと簡単でした。

風の噂では、kenji_s様がFuelPHPの本を執筆中とのことです。このテーマクラスの詳細な使い方も説明していただければ助かるのですが!

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

コメント

  1. shohei より:

    参考にさせて頂いていますが、疑問点ありましたのでご連絡しました。
    項番1のapp/config/theme.phpについて、
    ‘view_ext’ => ‘.html’,
    となっていますが、その場合、sampleには”index.html”となるべきではないでしょうか。
    あるいは、”index.php”にするのであれば、上記設定は
    ‘view_ext’ => ‘.php’,
    になるかと思います。


コメントをどうぞ

このページの先頭へ