それでは実際にサンプルコードを作りながら解説していきましょう。
Skinnyを実行するまで、たった3つの手順だけです。
それではまず最初に、Skinnyを利用するプログラムを作成しましょう。
ここではSkinnyのサンプルファイルと同じく、sample01.php にします。
内容はSkinnyに添付しているサンプルと同じですので、そちらを見ながら解説と照らし合わせて下さい。
このファイルを元に説明していきます。
1| <?php 2| // Skinny 呼び出し 3| require_once( "../../Skinny.php" ); 4| // Skinnyへ渡す配列宣言($outとします) 5| $out = array(); 6| // テンプレートで出力したい内容を連想配列に追加 7| $out['title'] = "Hello world."; 8| $out['nowtime'] = time(); // 現在時刻とか 9| $out['my_age'] = 25; // 年齢とか 10| $out['message'] = "動きました\nおめでとう!!\n"; // メッセージとか 11| // $outの内容をSkinnyで出力 12| $Skinny->SkinnyDisplay( "sample01.html", $out ); 13| ?>
先ほどアップロードしたSkinny本体を読み込んでいる部分です。
Skinnyを利用したい場合は、Skinny.php を読み込んでしまえば準備完了です。
これでSkinnyが内部で実行され、Skinnyクラスのインスタンスが生成された状態になります。
テンプレートで出力したい値を格納するための配列を宣言しています。
Skinnyでは表示させる為のデータを「連想配列」として最後にまとめてSkinnyへ渡します。
作者はこの出力用の連想配列に「$out」とする事を習慣としていますので、以降この名前で解説していきます。
5行目で宣言した配列に、テンプレートで出力したい値をどんどん $out へ追加していきます。
ここでは後の説明の為に、「文字列」「数値(年齢)」「時間(UNIXTIME)」を入れています。
見て分かる通り至極一般的なPHPのコーディングで、目新しい事は何もありません。
Smartyのように、出力したい内容を逐一 $smarty->assign(); 等と記述する必要もありません。
それではいよいよテンプレートへ値を渡してみましょう。
この行は先ほどの「$out」の内容を「sample01.html」を使って出力しなさい。という命令になります。
これで sample01.php へ Skinny の導入は完了です。
どうですか? 難しかったでしょうか?
あなたがPHPコードで新しく覚える事は「 $Skinny->SkinnyDisplay 」というたった一つの命令です。
それでは次に画面に表示させるためのテンプレートファイルを作成していきます。
先ほどSkinnyDisplayで指定した「sample01.html」を新しく作ります。
ピンク色で書かれた部分が Skinny独自の展開タグの部分です。
1| <html> 2| <head> 3| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4| <title><% echo(title) %></title> 5| </head> 6| <body> 7| 8| 今日は <% dval(nowtime,'Y/m/d H:i:s') %> です。<br /><br /> 9| 10| 私の年齢は<% echo(my_age) %>歳です。<br /> 11| <% if(my_age,>=,20) %> 12| 成人しています。<br /> 13| <% else %> 14| まだ未成年です。<br /> 15| <% /if %> 16| <br /> 17| 18| <% echo(message|nl2br) %> 19| 20| </body> 21| </html>
<% echo(title) %> と書かれている部分に注目してください。
この <% ~ %> で囲まれた部分が、Skinnyの展開タグと呼ばれる独特の書式です。
この場合は echo(~~)となっているので、echoタグと呼んでいます。
勘の良い方ならもう大体の察しが付いたことでしょう。
echo(title) とは、$out['title'] の内容に置き換えなさいという命令です。
この title には、sample01.php の7行目で代入した "Hello world." の文字列が入っています。
このechoタグは Skinny内部で <?php echo $out['title']; ?> に置き換えられます。
最終的にこの部分はPHPとして実行され <title>Hello world.</title> としてブラウザへ出力されます。
これが基本的なテンプレートエンジンの使い方になります。
ついでなので、18行目の出力部分を見てみましょう。
echoタグを利用して message の内容を出力しているのですが、message の後ろにパイプ(縦棒)で区切って nl2br という文字が付いていますね。
これは「修飾子」と呼ばれるオプションです。
元のデータに対して 「ちょっと加工してね♪」 という付加機能を指定する事ができ、echoタグにはこの修飾子が多く用意されています。
echoタグの正式な書式は、<% echo(argument|opt1|opt2|opt3|...) %> で、出力したい値の後に「|」で区切りながら、必要なだけ修飾子を設定する事が出来ます。
修飾子は左から順に実行され、順番を変える事で様々な出力形態に応用させる事が出来るのですが、ここでは「改行コードを<br />に変換する」という nl2br修飾子 を指定しています。
nl2br修飾子を付けない場合、ブラウザへは「動きました\nおめでとう!!\n」の様に普通の改行コードのまま出力されるため見た目上で改行されません。
nl2br修飾子を付ける事で「動きました<br />おめでとう!!<br />」と改行コードがBRタグに置き換えて出力される為、ブラウザ上の見た目も改行されて表示されるようになります。
echoタグ修飾子には他にも、「文字列からHTMLタグを取り除く」「文字列をエスケープする」「URLをリンクに置き換える」「文字列の長さを指定する」「全角半角カナ等を変換する」「文字列の一部だけを切り出す」など様々なものが用意されています。
また、PHPの老舗テンプレートエンジンであるSmartyの修飾子のほとんどを継承しています。
Smartyに慣れ親しんだユーザーであればここでの学習コストは大幅に少なくなる事でしょう。
(その他のechoタグに関する機能や、修飾子の詳細はechoタグマニュアルをご覧ください)
<% dval(nowtime,'Y/m/d H:i:s') %> は、dvalタグと呼ばれます。(注釈参照→)
dval とは date value の略で、名前の通り日付出力に特化したタグです。
先ほど sample01.php の 9行目で $out['nowtime'] = time(); と代入しました。
もう誰が見ても、UNIXTIMEの値を YYYY/MM/DD hh:mm:ss 形式で出力しなさいという事ですね。
そして内部で <?php echo date('Y/m/d H:i:s',$out['nowtime']); ?> として実行される事が容易に想像できます。
もちろん、date関数に渡されるという事は、下記の様な日付形式で出力する事も可能です。
<% dval(nowtime,'Y年n月j日') %> とすれば、2011年2月27日 の様に出来ますし、
<% dval(nowtime,'F j, Y, g:i a') %> とすれば、March 02, 2011, 7:24 pm の様に出力も出来ます。
今回のサンプルではPHPプログラム中で time()としてUNIXTIME値を代入しました。
しかし実際の業務ではデータベースと連携する事が大多数の為、データベース中で扱われるTIMESTAMPやDATETIMEの"YYYY-MM-DD hh:mm:ss"という書式で扱う事がほとんどです。
dvalタグでは、出力元の値としてこれら日付形式の文字列でも渡すこともできます。
数値のみの場合はUNIXTIMEとしてそのまま、、、
数値以外の文字が含まれた場合は strtotimeを実行してから、、、
という実に気前の良い処理になっています。
dvalタグはSkinnyを利用する中でかなり使用頻度の高いタグですので是非覚えてください。
これは少し複雑な「ロジック」と呼ばれるプログラムっぽい処理の記述です。
本来は複雑な処理はプログラム側でやるべきですが、Skinnyではテンプレート側で簡単な処理のみを実装しています。
それでは 11行目から見て行きましょう。
Skinnyを使おうと思っている方はPHPの心得もあると思いますので、展開後のPHPを書いてみました。
11| <?php if( $out['my_age'] >= 20 ){ ?> 12| 成人しています。<br /> 13| <?php }else{ ?> 14| まだ未成年です。<br /> 15| <?php } ?>
どうでしょうか。 PHPのコードにする事で分かり易くなったと思います。
Skinnyではこのようにプログラム側で処理するほどでも無い簡単な処理を記述する事が出来ます。
「条件によって出し分ける分岐」「連続したデータを処理する繰り返し」「値を変更する操作」など。
Skinnyでは学習コストを低く抑えるため、最低限必要と思われる処理を5種類のみ搭載しています。
先ほども触れましたが、本来「処理」に関する記述はテンプレートではなくプログラムに書くべきです。
しかし、時と場合によってはテンプレートに記述出来る方がスマートな場合があります。
「男女で色分けしたい」「フラグに合わせてアイコンを表示したい」など、表示に関わる部分はテンプレートに記述出来た方が便利な事も多いため、Skinnyでは下記5種類の処理タグを用意しています。
この5種を覚えるだけで、Skinnyを9割マスター出来ると言っても過言ではありません。
条件分岐 | 変数操作 | 繰り返し | 差し込み | 機能追加 |
---|---|---|---|---|
if , ifs , def , even | var , calc | each , for | external | plugin |
先ほど作成したsample01.phpにブラウザからアクセスしてみましょう。
間違いが無ければこのように表示されるはずです。
今日は 2024/12/08 12:08:26 です。
私の年齢は25歳です。
成人しています。
動きました
おめでとう!!
どうでしょうか。このように表示されたでしょうか。
この状態ではCSSも当てていない素っ気ない表示ですが、もっとデザインされたHTMLに自由に組み込んで、色々とカット&トライで試してください。