この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
php_template [2019/01/02 19:44] 管理者 |
php_template [2019/01/03 00:57] 管理者 |
||
---|---|---|---|
ライン 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); | ||
} | } | ||
ライン 24: | ライン 29: | ||
</code> | </code> | ||
- | ===== サンプルプログラム ===== | + | ==== サンプルプログラム ==== |
下記2つのファイルをPHPの動作するディレクトリに保存して、ブラウザでtemplate.phpを表示するとテンプレートの専用タグの一に出力データが表示されます。 | 下記2つのファイルをPHPの動作するディレクトリに保存して、ブラウザでtemplate.phpを表示するとテンプレートの専用タグの一に出力データが表示されます。 | ||
ライン 32: | ライン 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); | ||
} | } | ||
ライン 71: | ライン 79: | ||
<p>通常文書:{{text}}</p> | <p>通常文書:{{text}}</p> | ||
<p>HTML許可:{{html}}</p> | <p>HTML許可:{{html}}</p> | ||
- | <p>HTML不許可:{{html}}</p> | ||
<p>未使用キーは除去→:{{hogehoge}}</p> | <p>未使用キーは除去→:{{hogehoge}}</p> | ||
</body> | </body> |