【PHP/Smarty】配列の使い方
だいぶ前に作られたプログラムを触る機会があって、ちょっと「?」となったので備忘録。
「Smarty」?なにそれ?
{* // 触ったコードはこんな感じ *} {* // file.tpl.html *} {foreach from=$cojp_member_data.zip_data key=member_key item=member_item} <p>{$member_key | escape:'html'}<span{if $member_item.zip_code eq 12}class="fontRed"{else}class="fontBlue"{/if}>{$member_item.zip_name | escape:'html'}</span></p> {/foreach}
HTMLファイルに見たことのないコードが...
こんなのがめちゃめちゃ並んでて、もうわけわからん…
調べてみると、下記のようなことをやってます。
<?php foreach($cojp_member_data["zip_data"] as $member_key => $member_item) { if($member_item["zip_code"] == 12) { echo "<p><span class='fontRed'>"; echo $member_item["zip_name"]; echo "</span></p>"; } else { echo "<p><span class='fontBlue'>"; echo $member_item["zip_name"]; echo "</span></p>"; } } ?>
ちょっと前のテンプレートエンジンなんだとか
PHPファイルで生成した値を、テンプレートファイルに表示させるやり方の一つに、Smartyエンジンってのが使われていたらしい。
PHPファイルの中に、こんなのがあったのがまさにそれ。
// これがテンプレートファイルに「アサインする」ってこと
$smarty->assign("cojp_member_data", $cojp_member_data);
配列cojp_member_dataを、指定のテンプレートファイルに"cojp_member_data"って変数でアサインする。
そうすることで、テンプレートファイルでは、
{* アサインした変数名に「$」を書いて使用 *} {* カーリーブラケット「{}」で囲むのがポイント *} {$cojp_member_data}
こんな感じで使っていく。
配列の場合、ブラケットで要素を指定するのではなく「.」で指定
{$cojp_member_data.zip_code}
{* echo $cojp_member_data["zip_code"]; とやりたいことは一緒 *}
このようにドットで展開していくようになる。
また、二次元、三次元となった場合は、第2,第3要素もドットで展開していく。
{$cojp_member_data.zip_code.12.name} {* echo $cojp_member_data["zip_code"][12]["name"]; とやりたいことは一緒 *}
これにすんごい迷った...
CodeIgniterとか、CakePHPとかが出てくる前は、これが主流だったみたいだけど、
そのときは、まだプログラムの「プ」も知らない学生だったからなあ。
一応、備忘録に。