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 テンプレート ファイル
コードをコピー コードは次のとおりです:
if(!file_exists($t2p) || @filemtime($t2p) ) < @filemtime($t2h) )//テンプレート ファイルが変更されると、それに応じて通常の PHP ファイルが更新されます
{
template_go($t2p,$t2h);//テンプレートの変換が開始されます
}
return $ t2p;//次のように呼び出すことができる正規化された php ファイルを返します: include template('header','hello');
コードをコピー コードは次のとおりです:
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;
}
もちろん、この機能は現時点ではまだ比較的未熟であり、改善されることを楽しみにしています。