あちあち情報局

趣味や日曜プログラムなどを書いています

ユーザ用ツール

サイト用ツール


php_template

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
php_template [2019/01/02 07:56]
管理者
php_template [2019/01/03 01:36]
管理者
ライン 1: ライン 1:
 ====== PHP 簡易的なテンプレートエンジン ====== ====== PHP 簡易的なテンプレートエンジン ======
-外部テンプレートファイルを読み込み、テンプレート中の専用タグと同前を持った配列キーの内容を出力するだけの簡易的なテンプレートエンジンです。+外部テンプレートファイルを読み込み、テンプレート中の専用タグと同名の連想配列の内容を出力するだけの簡易的なテンプレートエンジンです。
  
-テンプレートはテキストとて読み込でstr_replaceで文字置換しているので処理速度は低速PHPの構文も使えませんしかしテンプレート中でPHPが使えないでPHPの構文エラーによるトラブルもりません+includeを使ってないのでPHP構文を使った複雑な処理はできませんが、逆にテンプレート編集でPHP構文エラーが発生ませ。 
 + 
 +大きな欠点は、表示する配列データの数だけ繰り替えし文字置換しているので配列(要素)が多くなると処理時間が大きくなる事特にテンプレートのファイサイズ大きい場合には影響が大きくなりま
  
 ---- ----
-※※※※※※※※※※\\ +===== 自作関数 ===== 
-機能絞りたった3行「[[php_template2|テンプレートエンジンその2]]」く作ったのでそちらも参照して\\ + 
-※※※※※※※※※※+入力された連想配列からキーとデータ分離しデータ部から専用タグ文字 %%{%%と%%}%% をエスケープして、テンプレートのキーと同名の専用タグを置換しています。 
 + 
 +<code php> 
 +// ---------- 簡易テンプレートエンジン関数 ----------  
 +function template_engin($html,​$dataArray){ 
 +  // 入力データ順番に置換({と}は再帰的に処理ないようエスケープ) 
 +  foreach ($dataArray as $key => $value){ 
 +    $value = str_replace( '​{',​ '&#​123;',​ $value); 
 +    $value = str_replace( '​}',​ '&#​125;',​ $value); 
 +    $html = str_replace( '​{{'​.$key.'​}}',​ $value, $html); 
 +  } 
 + 
 +  // テンプレート上に残った専用タグを除去 
 +  $html=preg_replace('/​{{.*}}/','',​$html);​ 
 + 
 +  // 変換されたデータを返す 
 +  return $html; 
 +
 +</​code>​ 
 + 
 +==== プログラム例 ==== 
 + 
 +下記2つファイルをPHPの動作するディレクトリに保存して、ブラウザでtemplate.phpを表示するとテンプレートの専用タグの一に出力データが表示れます。 
 + 
 +<code php template.php>​ 
 +<?php 
 +  // ---------- 簡易テンプレートエンジン関数 ----------  
 +  function template_engin($html,​$dataArray){ 
 +    foreach ($dataArray as $key => $value){ 
 +      $value = str_replace( '​{',​ '&#​123;',​ $value); 
 +      $value = str_replace( '​}',​ '&#​125;',​ $value); 
 +      $html = str_replace( '​{{'​.$key.'​}}',​ $value, $html); 
 +    } 
 +    $html=preg_replace('/​{{.*}}/','',​$html);​ 
 +    return $html; 
 +  } 
 + 
 +  // ---------- メイン ----------  
 + 
 +  // テンプレートファイルの読み込み 
 +  $fileTemp = file_get_contents('​template.html'​);​ 
 + 
 +  // テンプレート出力用の連想配列初期化 
 +  $dataArray=array();​ 
 + 
 +  // 出力データを登録(外部ユーザーの入力値はhtmlspecialcharsする事) 
 +  $dataArray['​title'​]='​デモタイトル';​ 
 +  $dataArray['​data'​] =date("​Y/​m/​d H:​i:​s"​);​ 
 +  $dataArray['​text'​] =htmlspecialchars('​Hello World!',​ENT_QUOTES,'​UTF-8'​);​ 
 +  $dataArray['​html'​]='<​a href="​http://​www.google.co.jp/">​Google</​a>';​ 
 + 
 +  //​テンプレート関数実行 
 +  $output=template_engin($fileTemp,​$dataArray);​ 
 + 
 +  //表示 
 +  echo  $output; 
 +</​code>​ 
 + 
 +<code html template.html>​ 
 +<​!DOCTYPE html> 
 +<html lang="​ja">​ 
 +<​head>​ 
 +  <meta charset="​utf-8">​ 
 +  <​title>​{{title}}</​title>​ 
 +</​head>​ 
 +<​body>​ 
 +  <​h1>​{{title}}</​h1>​ 
 +  <​p>​日付:{{data}}</​p>​ 
 +  <​p>​通常文書:​{{text}}</​p>​ 
 +  <​p>​HTML許可:​{{html}}</​p>​ 
 +  <​p>​未使用キーは除去→:​{{hogehoge}}</​p> ​  
 +</​body>​ 
 +</​html>​ 
 +</​code>​ 
 + 
 + 
  
-単純にデータを展開するだけだと芸が無いので、最低限の挿入データごと「HTML許可選択」・専用タグの「多重展開の防止」・「使用しなかった専用タグの除去」を行っています。 
  
-イメージ 
-^テンプレート^+^データ(php)^ 
-|<code html><​h1>​{{title}}</​h1>​ 
-<​p>​{{text}}</​p></​code>​|+|<​code php>​$output{'​title'​}='​デモ';​ 
-$output{'​text'​}='​Hello world!'</​code>​| 
  
-^ ↓結果 ​ ^ +===== カスタマイズ ===== 
-|<code html><​h1>​モ</​h1>​ +単純にータを展開するだけだと芸が無いので「HTML許可選択」を追加行っています。専用タグのキー名の頭に@をつけるとHTML許可して、@が無ければHTMLを不許可にしています。
-<​p>​Hello world!</​p></​code>​|+
  
------ +==== プログラム ====
-===== デモプログラムコード =====+
 下記のtemplate.phpとtemplate.htmlは同じフォルダに保存してください。(template.htmlはファイルパスを書き換えれば任意のディレクトリに移動できます) 下記のtemplate.phpとtemplate.htmlは同じフォルダに保存してください。(template.htmlはファイルパスを書き換えれば任意のディレクトリに移動できます)
  
ライン 87: ライン 157:
 </​html>​ </​html>​
 </​code>​ </​code>​
-===== 説明 ​=====+==== 説明 ====
 入力したテンプレートファイル中にある「%%{{title}}%%」や「%%{[html]}%%」などのタグを、配列変数$temp_array['​title'​]や$temp_array['​html'​]の内容に置き換えます。 入力したテンプレートファイル中にある「%%{{title}}%%」や「%%{[html]}%%」などのタグを、配列変数$temp_array['​title'​]や$temp_array['​html'​]の内容に置き換えます。
  
php_template.txt · 最終更新: 2019/01/03 01:36 by 管理者