この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
php_template [2019/01/03 00:24] 管理者 |
php_template [2019/01/03 01:36] 管理者 |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
外部テンプレートファイルを読み込み、テンプレート中の専用タグと同名の連想配列の内容を出力するだけの簡易的なテンプレートエンジンです。 | 外部テンプレートファイルを読み込み、テンプレート中の専用タグと同名の連想配列の内容を出力するだけの簡易的なテンプレートエンジンです。 | ||
- | includeを使ってないのでPHP構文を使った複雑な処理はできませんが、逆にテンプレートを編集してもPHP構文エラーは発生しません。 | + | includeを使ってないのでPHP構文を使った複雑な処理はできませんが、逆にテンプレート編集ではPHP構文エラーが発生しません。 |
- | 大きな欠点は2つ、1つ目は表示する配列データの数だけ繰り替えし文字置換しているので配列(要素)が多くなると低速化し、特にテンプレートのファイルサイズも大きい場合は影響が大きくなります。2つ目は変換処理を1要素ずつ順番に行っているのでデータ中に自分より後に変換する専用タグが含まれていると変換出力してしまう点です。そのため小規模なページ出力で外部ユーザーからの入力は表示しない方が良いです。 | + | 大きな欠点は、表示する配列データの数だけ繰り替えし文字置換しているので配列(要素)が多くなると処理時間が大きくなる事です。特にテンプレートのファイルサイズも大きい場合には影響が大きくなります。 |
---- | ---- | ||
- | ===== 関数本体 ===== | + | ===== 自作関数 ===== |
+ | |||
+ | 入力された連想配列からキーとデータを分離し、データ部から専用タグの文字 %%{%%と%%}%% をエスケープして、テンプレートのキーと同名の専用タグを置換しています。 | ||
<code php> | <code php> | ||
// ---------- 簡易テンプレートエンジン関数 ---------- | // ---------- 簡易テンプレートエンジン関数 ---------- | ||
function template_engin($html,$dataArray){ | function template_engin($html,$dataArray){ | ||
- | // 入力データを順番に置換 | + | // 入力データを順番に置換({と}は再帰的に処理しないようエスケープ) |
foreach ($dataArray as $key => $value){ | foreach ($dataArray as $key => $value){ | ||
+ | $value = str_replace( '{', '{', $value); | ||
+ | $value = str_replace( '}', '}', $value); | ||
$html = str_replace( '{{'.$key.'}}', $value, $html); | $html = str_replace( '{{'.$key.'}}', $value, $html); | ||
} | } | ||
ライン 25: | ライン 29: | ||
</code> | </code> | ||
- | ===== サンプルプログラム ===== | + | ==== プログラム例 ==== |
下記2つのファイルをPHPの動作するディレクトリに保存して、ブラウザでtemplate.phpを表示するとテンプレートの専用タグの一に出力データが表示されます。 | 下記2つのファイルをPHPの動作するディレクトリに保存して、ブラウザでtemplate.phpを表示するとテンプレートの専用タグの一に出力データが表示されます。 | ||
ライン 33: | ライン 38: | ||
function template_engin($html,$dataArray){ | function template_engin($html,$dataArray){ | ||
foreach ($dataArray as $key => $value){ | foreach ($dataArray as $key => $value){ | ||
+ | $value = str_replace( '{', '{', $value); | ||
+ | $value = str_replace( '}', '}', $value); | ||
$html = str_replace( '{{'.$key.'}}', $value, $html); | $html = str_replace( '{{'.$key.'}}', $value, $html); | ||
} | } | ||
ライン 83: | ライン 90: | ||
===== カスタマイズ ===== | ===== カスタマイズ ===== | ||
- | 単純にデータを展開するだけだと芸が無いので、最低限の挿入データごと「HTML許可選択」・専用タグの「多重展開の防止」・「使用しなかった専用タグの除去」を行っています。 | + | 単純にデータを展開するだけだと芸が無いので「HTML許可選択」を追加行っています。専用タグのキー名の頭に@をつけるとHTML許可して、@が無ければHTMLを不許可にしています。 |
- | + | ||
- | イメージ | + | |
- | ^テンプレート^+^データ(php)^ | + | |
- | |<code html><h1>{{title}}</h1> | + | |
- | <p>{{text}}</p></code>|+|<code php>$output{'title'}='デモ'; | + | |
- | $output{'text'}='Hello world!'</code>| | + | |
- | + | ||
- | ^ ↓結果 ^ | + | |
- | |<code html><h1>デモ</h1> | + | |
- | <p>Hello world!</p></code>| | + | |
- | + | ||
- | ----- | + | ==== プログラム ==== |
- | ===== デモプログラムコード ===== | + | |
下記のtemplate.phpとtemplate.htmlは同じフォルダに保存してください。(template.htmlはファイルパスを書き換えれば任意のディレクトリに移動できます) | 下記のtemplate.phpとtemplate.htmlは同じフォルダに保存してください。(template.htmlはファイルパスを書き換えれば任意のディレクトリに移動できます) | ||
ライン 163: | ライン 157: | ||
</html> | </html> | ||
</code> | </code> | ||
- | ===== 説明 ===== | + | ==== 説明 ==== |
入力したテンプレートファイル中にある「%%{{title}}%%」や「%%{[html]}%%」などのタグを、配列変数$temp_array['title']や$temp_array['html']の内容に置き換えます。 | 入力したテンプレートファイル中にある「%%{{title}}%%」や「%%{[html]}%%」などのタグを、配列変数$temp_array['title']や$temp_array['html']の内容に置き換えます。 | ||