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

WBOY
リリース: 2016-06-13 11:56:46
オリジナル
1062 人が閲覧しました

phpcms と discuz のソースコードを見たことがあるので、革新性に欠けるかもしれませんが、原理はほとんど同じですが、細部が若干異なる場合があります。
では本題に入り、具体的な実装プロセスについて話しましょう。
1. まず、テンプレートファイルをどこに置くかを決める必要があります。変換したphpファイルはどこに置くのでしょうか?そして、どのように名前を付けるのでしょうか?ソース コードを直接アップロードします:

コードをコピーします コードは次のとおりです:


function template($tpl = 'index) ',$dir = ' hello')
{
if(!file_exists($pd = TPL_PATH.$dir.'/'))@mkdir($pd,0777) または die("$pd ディレクトリの作成failed");//cache/tpl/hello/ など
if(!file_exists($td = TPL.$dir.'/'))@mkdir($td,0777) または die("$td directory作成に失敗しました");// data/tpl/hello/ など

$t2p = $pd.$tpl.'.php';// テンプレート ファイルの通常の変換後に形成された php ファイル。 ascache/tpl/hello/index.php
$t2h = $td.$tpl.'.html';//data/tpl/hello/index.html などの 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);/ /通常の置換
@chmod($t2p,0777);
return $str = file_put_contents($t2p, $str);//書き込み
}


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(.*) )}/Us' , '', $str);
/*{template(xx,yy)} は */
$str = preg_replace('/{include (.*)}/Us', '', $str);/* {include xx.php } に置き換えます */
$str = " ".$str;
//$str = preg_replace('/s /', ' ', $str);//Web ページのソース コードを表示して、
return $str;
}


もちろん、この機能は現時点ではまだ比較的未熟であり、改善されることを楽しみにしています。

追伸: ブログを書くのは初めてです。当初は、時間があるときに専門家から学びながら、自分の経験について話し、経験や教訓をまとめて技術的なブログを書こうと思っていました。
あと、ブログは保存も比較的簡単なので手間も省けて便利です(笑)。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート