ホームページ  >  記事  >  バックエンド開発  >  PHPテンプレート関数の正規実装コード

PHPテンプレート関数の正規実装コード

高洛峰
高洛峰オリジナル
2016-12-01 14:48:551126ブラウズ

phpcms と discuz のソースコードを見たことがあるので、革新性に欠けているかもしれませんが、原理はほとんど同じですが、細部が若干異なる場合があります。
本題に入り、具体的な実装プロセスについて話しましょう。
1. まず、テンプレートファイルをどこに置くかを決める必要があります。変換したphpファイルはどこに置くのでしょうか?そして、どのように名前を付けるのでしょうか?ソース コードに直接移動します。
コードをコピーします。 コードは次のとおりです。
function template($tpl = 'index',$dir = 'hello')
{
if(!file_exists($pd = TPL_PATH.$dir) .'/'))@ mkdir($pd,0777) または die("$pd ディレクトリの作成に失敗しました");//cache/tpl/hello/ など
if(!file_exists($td = TPL.$dir. '/'))@mkdir( $td,0777) または die("$td ディレクトリの作成に失敗しました");//data/tpl/hello/ など

$t2p = $pd.$tpl.'.php' ;//テンプレート ファイルは、通常の変換後に形成されます php ファイル (cache/tpl/hello/index.php など)
$t2h = $td.$tpl.'.html';//html テンプレート ファイル (data/ など) tpl/hello/index.html

2. 定期的な変換が必要になるのはどのような場合ですか?正規化後のphpファイルが存在しないか、正規化前のhtmlファイルが変更されている可能性があります。ここでは filemtime(string $path) 関数が使用されており、ファイルの最新の変更時刻が返されます。
コードをコピーします コードは次のとおりです:
if(!file_exists($t2p) || @filemtime($t2p) < @filemtime($t2h) )//テンプレート ファイルが変更された後、通常の php ファイルはそれに応じて更新されます
{
template_go( $t2p,$t2h);// テンプレート変換が開始します
}
return $t2p;// 正規化後に PHP ファイルに戻ります。これは次のように呼び出すことができます: include template('header' ,'hello');
}

3 .テンプレートの変換を開始し、まず HTML ファイルから読み取り、次に正規表現に置き換え、最後に php ファイルに書き込みます。
コードをコピーする コードは次のとおりです:
function template_go($t2p,$t2h)
{
$str = @file_get_contents($t2h);//読み出し
if($str === false) exit("テンプレート ファイルがありません。確認してください。 ");
$str = template_do($str);//定期的な置換
@chmod($t2p,0777);
return $str = file_put_contents($t2p, $str);/ /Write
}

4. 通常のルール、いくつかの比較的単純な通常の置換文法。
コードをコピーする コードは次のとおりです:
function template_do($str)
{
$str = preg_replace('/([nr+])t+/s', '\1', $str);//TAB タブを削除キャラクター。修飾子 /s は改行を無視しません
$str = preg_replace('/{$(.*)}/Us', '', $str);/*{$ xx} を に置き換えます。修飾子 /U を追加する必要があり、一致できるのは 1 回のみであることに注意してください。遅延マッチングも可能 */
$str = preg_replace('/{php (.+)}/', '', $str);/*{php xxxx} を < に置き換える; ?php xxxx ?> 修飾子 /s を追加できないことに注意してください。この規則を複数回実行する場合は、改行の問題を考慮する必要があります*/
$str = preg_replace('/{template(.*)}/)私たち', '< ;?php include template\1; ?>', $str);
/*{template(xx,yy)} は $str = preg_replace('/{include (.*)}/Us', '', $str);/*{include xx.php}replaced with */
$str = ""
//$ str = preg_replace(' /s+/', ' ', $str);//Web ページのソース コードを確認してください
return $str;

もちろん、この関数は今でも比較的単純です。改善されるのを楽しみにしています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。