FuelPHPでSmartyを使う

FuelPHP の view で Smarty を使うことが出来ます。
FuelPHP-1.8.2 でも動作確認できていますが、1.7 系での設定なので古いかもしれません(/_\*)

スポンサーリンク

設定手順

composer の設定

まずは、FuelPHP の composer の設定に Smarty を追加します。
以下のように composer.json の require に "smarty/smarty": "*" を記載します。
1.7系の時は "3.*" の方が無難かも。

 "require": {
        "php": ">=5.3.3",
        "composer/installers": "~1.0",
        "fuel/core": "1.8.*",
        "fuel/auth": "1.8.*",
        "fuel/email": "1.8.*",
        "fuel/oil": "1.8.*",
        "fuel/orm": "1.8.*",
        "fuel/parser": "1.8.*",
        "fuelphp/upload": "2.0.6",
        "smarty/smarty": "*"
 },

追加後、反映させるために update します。

 % php composer.phar update

これで必要なファイルが設置されます。
ちなみになにやら Composer のメッセージが表示された場合には、PHP: Composer をどうぞ。

Parse パッケージの有効化

次に、Parse パッケージを使えるようにします。
config/config.phpalways_load の packages のリストに parser を追加します。

 'always_load'  => array(
             'packages'  => array(
                                  'parser',
              ),

拡張子の変更

デフォルトでは、Smarty のファイルは .smarty という拡張子に設定されています。
誰のセンスか分かりませんが、非常にイマイチだと思いますので変えたいです(^_^;
やはりスタンダードなのは .tpl でしょうか。

いくつかやり方があるとは思うのですが、簡単なのは fuel/packages/parser/classes/view/smarty.php$extension を以下のように直接変更してしまうことです。

 public $extension = 'tpl';

既存パッケージを変更してしまうのはイマイチ、、、と感じる人は、独自のパッケージで拡張 view クラスを作成して always_load の packages に追加して、、、みたいなことをやると美しいかもしれません(^_^;

テンポラリ領域設定

Smarty は app/tmp/Smarty 以下に templates_c ディレクトリを作成し、キャッシュファイルを生成します。
従って、app/tmp/ に Web サーバの書き込み権限が必要です。
ま、tmp なので 777 でOKかと。

 # chmod 777 app/tmp

使用方法

通常は View::forge() であった箇所を View_Smarty::forge() とするだけです。
こんな感じですね。

 return Response::forge(View_Smarty::forge('default/index'));

View::forge() と View_Smarty::forge() は両立しますので、必要であれば Smarty を使う/使わないの使い分けも可能です。
views 以下のファイルは Smarty の記述がそのまま使えますので、特に迷うことはないかと思います。

コメント

タイトルとURLをコピーしました