![]() |
第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使っていてもデザインの自由度高くなるから是非、覚えておいて欲しいわ。 |
| たぬき | : | わかりました。次回も楽しみにしときます。 |
| 先生 | : | それじゃー今日はここまで。お疲れさんでしたー |
| たぬき | : | お疲れさんでしたー |