第4回 Smartyを使ってみよう ご意見・ご感想
先生 今日はいよいよSmartyの勉強をしてみましょう。
たぬき Smartyって何!便利なもんなん。
先生 Smartyは、PHPで使用されるテンプレートエンジンやねん。PHPでのテンプレートエンジンは他にもいろいろあるねんけど、今は結構これ使っている人が多いみたいやね。コンパイルしてキャッシュ持ってたりして高速やし、結構いろいろな関数持ってたり(自分で定義することも出来たり)完成度の高さが魅力的やね。
たぬき でもなんでテンプレートなんか使うの?せっかくHTMLに書ける言語やねんからそのまま書いたらええんとちゃうの?
先生 そりゃそうやねんけど、テンプレート使うとロジック部分とHTMLの部分とが別れるので、保守しやすいし、作りやすいで。まあ理想的なMVCモデルを目指そうと思うと、これが基本的な考えの第一歩ってとこかなー。
たぬき ふーん。まあともかく、教えて教えて。
先生 よし。ではさっそくサンプルを作ってみよう!わかりやすいように第1回と同じ物を作ってみよか。例えばこんな風に2x2のテーブルを表示して列番号行番号を表示しようと思ったら・・・

図1.サンプル実行結果
先生  こんなテンプレートとソースで表示できるねん。
001:  {* comment *}
002:  <html>
003:  <body>
004:  <table border="1">
005:      <tr>
006:          <td>{$list1}</td>
007:          <td>{$list2}</td>
008:      </tr>
009:      <tr>
010:          <td>{$list3}</td>
011:          <td>{$list4}</td>
012:      </tr>
013:  </table>
014:  </body>
015:  </html>
図2.テンプレートsample1.tpl
001:  <?php
002:  
003:      require_once "libs/Smarty.class.php";
004:  
005:  // Smarty 設定
006:      $smarty = new Smarty;
007:      $smarty->templete_dir = "./templates";
008:      $smarty->compile_dir  = "./templates_c";
009:      $smarty->cache_dir    = "./cache";
010:  
011:      $smarty->assign('list1', 11);
012:      $smarty->assign('list2', 12);
013:      $smarty->assign('list3', 21);
014:      $smarty->assign('list4', 22);
015:  
016:  // 表示
017:      $smarty->display("sample1.tpl");
018:  ?>
図3.sample1.php
たぬき ふーん、なんとなくわかるなー。
先生 そうやろだいたいわかるやろ。簡単な説明したろ。

1行目:コメント、コメントは{**}で囲ったところがコメントやで。
6,7,10,11行目:これがPHPで設定された変数を表示するところで{$変数名}で記述しとくようにすればいいんやで。
テンプレートの説明はこんなもんで
3行目:Smartyのライブラリを取りこんで
6,7,8,9行目:オブジェクトを生成して、テンプレートとかキャッシュを何処にするかを定義しときます。ここら辺はおまじないといっしょやね。とりあえず何も考えずにつけといたらええねん。注意せなあかんのは、templete_cとかのディレクトリはWebサーバが書けるようにしとかあかんちゅうことやね。777にしとくとか757にしとくとか、所有者をWebサーバのIDにしとくとか、これやっとかな使われへんで。
11,12,13,14行目:見ての通り、変数にセットしてます。assign関数で変数をセットするようにすればOKです。
17行目:templete.tplを使って表示するという指定です。
以上PHPソースの説明でした。
たぬき でもあんまり利点がわからへん。
先生 うーん、そうやなー。ロジック部分が複雑なもんやったら、ちょっとはわかると思うねんけど。それやったらソース部分がこんな感じでコーディングしたくってデザイナーさんと共同で作らなあかんときはどうや。
001:  <?php
002:  
003:      require_once "libs/Smarty.class.php";
004:  
005:  // Smarty 設定
006:      $smarty = new Smarty;
007:      $smarty->templete_dir = "./templates";
008:      $smarty->compile_dir  = "./templates_c";
009:      $smarty->cache_dir    = "./cache";
010:  
011:      $k = 1;
012:      for ($i = 1; $i<=2; $i++) {
013:          for ($j = 1; $j<=2; $j++) {
014:              $smarty->assign('list'.$k, $i . $j);
015:              $k++;
016:          }
017:      }    
018:  
019:  // 表示
020:      $smarty->display("sample1.tpl");
021:  ?>
図3.sample2.php
たぬき うーん、なるほど、こんなんデザイナーさんが見たら確実に拒否反応を示すなー。1回目にDreamweaverで見たときつぶれてたやつやんね。 それがどうなるん?
先生 こないなるねん。
図1.サンプル実行結果
たぬき ほんまや、表がちゃんと見れてる。
先生 だからデザイナーさんが作るのはこんなロジック部分とか意識せずに、テンプレートだけ書いてたらいいから分業できるやろ。
たぬき 確かにそうですね。ちょっと納得。
先生 ちょっとかいな。まあわかってくれたようやからええわ。それじゃ今回はこんなところで、次回はSmartyとHTML_QuickFormの連携なんかについてやってみましょう。
たぬき へー、HTML_QuickFormと連携できんの。すごーい。
先生 詳しくはまた次回やけど、HTML_QuickFormはいろんなテンプレートエンジンと連携できるねん。これを使ったらHTML_QuickForm使っていてもデザインの自由度高くなるから是非、覚えておいて欲しいわ。
たぬき わかりました。次回も楽しみにしときます。
先生 それじゃー今日はここまで。お疲れさんでしたー
たぬき お疲れさんでしたー

インフォメーションへ戻る 第1回 PHPのコードとHTMLタグ コラム
  第2回 HTML_QuickFormを使ってみよう
  第3回 HTML_QuickFormを使ってみよう(パート2) HTML_QuickForm Memo
  第4回 Smartyを使ってみよう HTML_QuickForm Menu
  第5回 HTML_QuickFormとSmartyを使ってみよう HTML_QuickForm Smarty Tips
  第6回 HTML_QuickFormとSmartyを使ってみよう(パート2) Mojavi Memo
  第7回 実践編 HTML_QuickFormとSmartyを使ってみてどうよ? Ajax Memo
  第8回 HTML_QuickForm_Controller大好き!
  第9回 Mojaviのまとめ
  第10回 Ajax使ってみました
  第11回 PHPEclipse開発環境設定
  第12回 Eclipse+PHPIDEインストール記
  第13回目 PHPIDEによるデバック
  第14回目 Selenium IDEを使ってみました
  第15回目 PDT(旧 PHPIDE)のインストール、デバック