よくあるテンプレートエンジンは重いので自作しています。
preg_match() は、PHP は重いという情報や、
正規表現が難しく、strrchr() 、 preg_match() の 2 つでディレクトリ内の
ファイルを検索したり、他に良い関数は無いかと考えてはみましたが、
情報を探すことが出来ませんでした。
もっとスマートな方法でコンパクトにならないのか、というのが質問です。
良い書き方を教えて頂けると助かります。
その他に気になっているところです。
小さな質問です。メインではありません。わかる方がおりましたら、情報を頂ければと思います。
- PHP のバッファとは、PHP の仮想メモリーのような箇所に記録している ?
- コード中の ob 関連の関数 を正しく使用できているか ? 、タイミングは正しいか ?
- include_once 読み込みは 1 回で良いか ? 、 _once ではない方が良いか ?
宜しくお願い致します。
ディレクトリ構成
/templates/header.html
/templates/main.html
/templates/base.html
/templates/index.html // 使用しない、ダミーファイル。
/templates/data.php // DB よりテンプレートのデータを配列にするファイル。
index.php
コード
index.php
PHP
1<?php 2 3 initializeView(); 4 5 function initializeView() 6 { 7 // 指定パスのファイルとディレクトリのリストを取得 8 $dir = scandir( '/templates' ); 9 10 foreach ( $dir as $finfo ) 11 { 12 // HTML ファイル以外を除く 13 if ( strrchr( $finfo, '.' ) === '.html' ) { 14 // base.html, index.html を除く 15 if ( !preg_match( '/^base|^index/i', $finfo ) ) { 16 // 出力のバッファリングを有効にする 17 ob_start(); 18 // 対象 19 $arr_html[$finfo] = include_once '/templates/' . $finfo; 20 // バッファの内容を取得、バッファリングを無効にする 21 $arr_html[$finfo] = ob_get_clean(); 22 } 23 } 24 } 25 26 # ベース 27 include_once '/base.html'; 28 } 29 30?>
header.html
HTML
1<header> 2 <h1><?php echo $heading; ?></h1> 3</header>
main.html
HTML
1<main> 2 <?php 3 foreach ( $arr_request as $data ) { 4 echo '<p>' . $data['username'] . '</p>'; 5 } 6 ?> 7</main>
base.html
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3 <body> 4 <?php echo $arr_html['header.html']; ?> 5 <?php echo $arr_html['main.html']; ?> 6 </body> 7</html>
回答4件
あなたの回答
tips
プレビュー