[PHP] HTML TEMPLATE

PHPでHTMLのテンプレートと言えば、SmartyやSigmaとかになるのかな? ただ・・・個人的にHTML側に変数やコードっぽいモノを埋め込んだりするのが面倒というか(--;) 出来ればPHPとHTML(とJSやCSS)はきっちりと分けたいのだよ
例えば、こんな風なListを作りたい場合

<ul>
  <li>テスト1</li>
  <li>テスト2</li>
  <li>テスト3</li>
  <li>テスト4</li>
  <li>テスト5</li>
  <li>テスト6</li>
  <li>テスト7</li>
  <li>テスト8</li>
</ul>

こんな風なテンプレートを用意しておいて、PHP側で埋め込みを処理する事でHTMLを書く量を減らせるし、行数もPHP側で制御が可能になるんじゃないの?と思ったりするんだよね

<ul>
 <!-- Begin LIST -->
  <li>%TEST%</li>
 <!-- End LIST -->
</ul>

という事を可能にするテンプレート(と言っても単純なPHPのfunctionなんだけどね)を作ってみた

上記のテンプレートを使う場合、PHP側では

// Classの初期化
$TPL = new template();

// テンプレートファイルの読み込み(上記の例はsample.htmlとして保存されてるとする)
$TEMPLATE = 'sample.html';

// テンプレートを読み込む
$_HT = $TPL->set($TEMPLATE,'index');
$_HTML = $TPL->htmlset($_HT['index'],'','','0');

これで、$_HTMLの変数には以下のデータが保存される

<ul>
%LIST%
</ul>

<li>%TEST%</li>%LIST%に置き換わっていますね
次に配列の中身を展開してLISTを完成させるまでのコードはこんな感じ

$ARR = array('apple','orange','blueberry','lemon','grapes');
foreach ( $ARR as $VAL ) {
  $LI = $TPL->htmlset($_HT['LIST'],'%TEST%',$VAL,'0');
 
  $_HTML = $TPL->htmlset($_HTML,'%LIST%',$LI,'1');
}

このPHPを実行する事で、$_HTMLの中身が以下のように構成される

<ul>
  <li>apple</li>
  <li>orange</li>
  <li>blueberry</li>
  <li>lemon</li>
  <li>grapes</li>
%LIST%
</ul>

こんな感じで繰り返し処理が簡単にHTML化する事が出来る
ただ、これをprintで出力してしまうと%LIST%まで表示されてしまうので、出力用に別のfunctionを実行します

$TPL->htmlout($_HTML);

これで、$_HTML内にある%XXXXX%を全てクリアしてくれる
1つだけ困るのはデータにURLENCODEされたデータを埋め込む時なんだよね。まぁ、その時は少し面倒な処理をする必要があるんだけどね(--;)

そんな感じのmklcore.phpと名付けたPHPファイルなんだけど、実はコードが稚拙すぎるので公開してません(笑)

ループ部分を入れ子に出来たりと何かと便利なのですが^^;
こういうのって人が作ったのを使うのでも良いのだろうけど、機能を全て把握してHTMLやPHPをどう書くの?とか悩むくらいなら自分で必要な機能だけのクラスを作って利用した方が後々楽が出来るんじゃないのかな?
ってお話でした

まぁ、どうしても使ってみたいという奇特な人が居たらこっそり相談してみてください(笑)

この記事が気に入ったらサポートをしてみませんか?