見出し画像

テンプレートエンジンを3行で作る

htmltemplate.inc?なにそれ、おいしいの?

htmltemplate.incは2003年に更新が終了したテンプレートエンジンです。

POTI-board改はPHP7でも動くようにパッチをあてたhtmltemplate.incで動いていました。

しかし、さすがにもう古すぎるのでという事で…。

テンプレートエンジンをSkinny.phpに換装したPOTI-board改二が爆誕しました。

今使っているテンプレートエンジンが使えなくなってしまったら?

Skinny.phpはhtmltemplate.incと出力の仕方がよく似ていたので、書き直しは最小限ですみました。

しかしそのほかのテンプレートエンジンを使うとしたら…POTI-board本体の大幅な書き直しが必要になります。

この10行テンプレートエンジンを使いたくても、やはり書き直しが必要に…。

あれ?includeするだけでいけるのでは…。

3行テンプレートエンジン

/* HTML出力 */
function htmloutput($template,$v){
	include $template;
}

という事でHTML埋め込みのPHPファイルをincludeするだけのエンジンを作ってみました。
HTML出力の関数で各モードのHTMLファイルを読み込みます。
やっている事はただそれだけです。

POTI-boardはひとつの変数に連想配列で情報をつめこんでいます。ここでは$vという変数です。それを出力します。

動かしてみると…

画像1

これはPOTI-boardのレス画面です。
includeしただけなのに動いています。

HTML埋め込みのPHPの内容

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
<?php foreach($v['oya'] as $oya):?>
[<?=$oya['no'];?>] <?= $oya['sub'];?> <?= $oya['name'];?>
	<?php if($oya["painttime"]):?> 描画時間:<?= $oya['painttime']?><?php endif;?>
<?php  if($oya['updatemark']): ?><?=$oya['updatemark'] ?> <?php endif;?> <?=$oya['now']?><br>
<?php if($oya["src"]):?> 
<img src="<?=$oya['imgsrc'] ?>"><br>
<?php endif;?>
 <?=$oya['com'] ?>
<!-- レス記事グループ  -->
<?php if(isset($oya['res'])):?>
<?php foreach($oya['res'] as $res):?>
<hr>
<!-- レス記事ヘッダここから -->
[<?=$res['no'];?>] <?= $res['sub'];?> <?= $res['name'];?> 
<?=$res['now']?><br>
<?=$res['com'] ?>
<?php endforeach; ?>
<?php endif;?>
<!-- レス記事グループここまで -->
<?php endforeach; ?>
</body>
</html>

レス画面のテンプレートをPHP埋め込みのHTMLで書き直したもの。
全部書き直すのは面倒だったので、一番複雑なスレッドの親と子の多次元連想配列の箇所だけ…。

そしてHTML埋め込みのPHPでも基本機能はなんとかなるのかも…という事がわかった時点で満足して作業終了です。
しかし、いつか役に立つことがあるかもしれないので記事として残しました。

POTI-board改二

ここでとりあげたPOTI-board改二は、現在進行系で開発が継続している絵かき掲示板のPHPスクリプトです。

多くの開発者が撤退している掲示板スクリプトという分野…。

さらにその中のお絵かき掲示板…。
せっかく開発しても使ってくれる人が増えないとどうにもなりません。
もっとひろまってほしいのですが。

POTI-board改二をベースにしたスクリプトを使ったお絵かき掲示板交流サイトの運営も続いています。

投稿大歓迎ですので、よろしくお願いいたします。

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