やっぱSmarty使いたいですか?

感覚的な話で恐縮ですが日本人のSmarty支持率って多いのではないでしょうか?よくお客さんに「Symfony使います」と提案すると「テンプレートエンジンがなくて大丈夫か?」と言われます。その度に「PHP自体元々テンプレートエンジンでして、、、」のような話でお茶を濁しています。Smartyは確かに便利で強力ではありますがsymfonyと役割が重なる部分があり無駄が多いです。しかしながら、

<?php echo $value ?>

と書くよりも

{$value}

と書いた方が楽なのは誰が見ても明らかです。テンプレートエンジンがSmartyしか選べないようなフレームワークは使いたくありませんが、性能面に問題ない使いたい所にだけSmartyを選べれば一番嬉しいですね。そんな要求に応えてくれるプラグインが公開されました。 以前、symfonyForumで公開されていたSmartyViewライブラリを利用していた方には朗報です。あのSmartyViewがsfSmartyViewPluginとして還ってきました。

インストール

sfSmartyViewPluginのインストール

12/12現在pearインストール、Subersion共にできないようですのでsfSmartyViewPluginからダウンロードしてきたパッケージをmyproject/pluginsディレクトリに展開します。最後のリネームは気分の問題です。

cd myproject/plugins
unzip sfSmartyViewPlugin-x.x.x.tgz
mv sfSmartyViewPlugin-x.x.x sfSmartyViewPlugin

Smarty本体のインストール

Smartyのサイトからダウンロードして適当な所に展開します。私は、Smarty-2.6.16をダウンロードしてきて、myproject/libに展開しました。この構成だとSmarty.phpはmyproject/lib/Smarty-2.6.16/libs/Smarty.phpに置かれる事になります。

インストールは以上で完了です、難しくありませんね。

アプリケーションの設定

app.ymlに以下の項目が設定可能です。

all:
  sfSmartyView:
    template_extension: .tpl
    class_path: Smarty
    cache_dir: Smarty    # myprojecct/cache/Smarty
    template_security: false

既に書いてあるのはデフォルトの値です。私は以下のようにして使っています。

all:
  sfSmartyView:
    template_extension: .html
    class_path: Smarty-2.6.16/libs

class_passにSmarty本体のインストール時にSmarty.phpを配備したパスを指定します。

sfSmartyViewを利用する

sfSmartyViewPluginを早速利用してみます。

実験環境の構築

サンプル用にアプリケーションsmartyモジュールcontentを作成します。

symfony app smarty
symfony module smarty content

module.ymlの設定

sfSmartyViewを利用するためにアプリケーション毎もしくはモジュール毎のmodule.yml(なければ作成する)に以下のように記述します。

all:
  view_class: sfSmarty

12/12現在、sfSmartyViewPluginに同梱されているREADME.pdfは間違っていますのでご注意ください。

テンプレートの置き換え

次に、テンプレートファイルをplugin標準の物に置き換えます。ここではmodule.ymlに書いたように拡張子を.tplから.htmlへ変更をしています。

cp plugins/sfSmartyView/templates/layout.tpl apps/smarty/templates/layout.html
cp plugins/sfSmartyView/templates/indexSuccess.tpl apps/smarty/modules/content/templates/indexSuccess.html

デフォルトのアクションを修正

myproject/apps/smarty/modules/content/actions/actions.class.phpのindexアクションを以下のように書きかえます。

  public function executeIndex()
  {
      //$this->forward('default', 'module');
  }

デフォルトでdefault/moduleに飛んでしまうのでそれを止めるだけです。

実行します

http://myserver/contentなどにアクセスします。すると、

やったー動いた!!ん、????なんかウェブデバッグツールが赤くなっています。

まだ、α版のせいでしょうかファイルが足らないみたいです。しょんぼり。


sfSmartyViewPluginは現在、α版ということでまだ試すのは時期尚早だったかもしれません。今日の所はsfSmartyViewPluginはどんなプラグインを目指しているのか判っただけで良しとします。一点気になったのがEscapingOutputの件ですが、これはどうやらオフになってしまうようです。ここの仕様は変えてもらいたいです(手でいちいちescapeしているのが面倒→Flexyつかえってか)。

Leave a Reply

You must be logged in to post a comment.