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

PHPテンプレート関数の正規実装コード_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:14:39927ブラウズ

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;

もちろん、この関数は今でも比較的単純です。そしてそれを改善することを楽しみにしています。
追伸: ブログを書くのは初めてです。当初は、時間があるときに技術的なブログを書き、自分の経験について話し、経験と教訓をまとめ、同時に専門家から学ぼうと考えていました。
あと、ブログは比較的保存しやすいので手間も省けて便利です(笑)。

http://www.bkjia.com/PHPjc/326214.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326214.html技術記事 phpcms と discuz のソースコードを見たことがあるので、革新性に欠けるかもしれませんが、原理はほとんど同じですが、細部が若干異なる場合があります。 では本題に入り、具体的な実装プロセスについて話しましょう...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。