#phpchina开户#
Smarty は常に冗長なものとみなされてきましたが、Smarty を冗長だと考える人は冗長だと思います。この話はもうやめましょう。今日は、誰もが独自のテンプレート エンジンを作成できるように、テンプレート エンジンの作成方法を説明します。この記事を読むと、Smarty についての理解が深まるでしょう。私のテンプレート エンジンは Stupid (「愚かな」という意味) と呼ばれています。あまりにも賢いものは好きではありません。
Stupid テンプレート エンジンは 3 つのファイルで構成されています。それらは、愚かな.class.php、愚かな_parser.class.php、愚かな_debugger.class.phpです。
Stupid.class.php のタスクは変数、テンプレート パス、および表示関数を設定することですが、Stupid_parser.class.php はテンプレート ファイルのコンパイルに使用され、Stupid_debugger.class.php はデバッグに使用されます。
さて、今すぐ愚かな.class.phpを書きましょう。
1. 新しい PHP ファイルを作成します。「愚かな.class.php」という名前です。
私たちのクラスは Stupid という名前です。まずメンバー変数を設計しましょう。
メンバー変数には、$_tpl_vars、$_tpl_file、$_parser、$_debugger が含まれます。
$_tpl_vars: テンプレート変数を保存するために使用されます。
$_tpl_file: テンプレート ファイル名を保存するために使用されます。
$_parser: StupidParser オブジェクトを保存するのはコンパイルされたオブジェクトです。
$_debugger: StupidDebug オブジェクトを保存するのは、
以下に定義されている 2 つの定数であり、テンプレート フォルダーとコンパイル フォルダーを保存するために使用されます。
定義('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
コーディングの開始>>>
<?php
定義('TPL_DIR', './templates/');
定義('TPL_C_DIR', './templates_c/');
クラスバカ{
プライベート $_tpl_vars;
プライベート $_tpl_file;
プライベート $_parser;
プライベート $_debugger;
}
?>
コンストラクターの作成を開始します>>>
public function Stupid() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('エラー: テンプレート フォルダーとコンパイル フォルダーを正しく設定してください');
}
ター
では、テンプレート パスとコンパイル パスが正しく設定されているかどうかを判断します。
クラスには主に次のメソッドがあります。
assign()、set_tpl_dir()、set_parsed_dir()、display()、debug()。
assign() メソッド:
assign() の目的は、テンプレート変数を設定することです。コードは次のとおりです。 >>>
public function assign($var, $value) {
if(isset($var) && トリム($var) != '') {
$this->_tpl_vars[$var] = $value;
true を返します。
} それ以外 {
exit('エラー: 変数名を設定してください');
}
}
まず、ユーザーが変数名を設定したかどうかを判断します。isset($var) &&rim($var) != '' を使用して判断します。trim($var) != '' を使用すると、ユーザーがスペースを含む変数名を設定できなくなります。設定されている場合、変数が正しい場合は、それをメンバー変数 _tpl_vars
メソッド
に保存します。
display() メソッドは、Stupid クラスで最も重要なメソッドです。テンプレートが更新されているかどうかを表示および検出するために使用されます。更新されていない場合は、元のコンパイル済みファイルが再度コンパイルされます。
コードは次のとおりです >>>
public
function display( $tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('エラー: テンプレート ファイルが存在しません');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = 新しい StupidParser();
$this->_parser->compile($tpl_file);
}
$parsed_file を含める;
は
、ステートメント !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file) に基づいて、テンプレート ファイルがコンパイルされているかどうか、およびコンパイルされていない場合は更新されているかどうかを判断します。テンプレート ファイルが更新された場合は、再コンパイルする必要があります。愚かなパーサー.class.php を導入し、StupidParser オブジェクトを作成し、コンパイルしたテンプレート ファイルをコンパイルします。通常の PHP ファイルの
debug() メソッド
です。
Debugg() メソッドは比較的単純です。これは、愚かな_debugger.class.php ファイルを導入し、StupidDebuger オブジェクトを作成し、デバッグのために StupidDebuger の start メソッドを呼び出すことです。
コードは次のとおりです。 >>>
public function debug ($tpl_file. ) {
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = 新しい StupidDebugger(TPL_DIR.$tpl_file);
$this->_debugger->start();
} それ以外 {
exit('エラー: デバッガ クラス ファイルが存在しません');
}
この
。
コメントや提案があれば、引き続きサポートしてください。
<?php
定義('TPL_DIR', './templates/');
定義('TPL_C_DIR', './templates_c/');
クラスバカ{
プライベート $_tpl_vars;
プライベート $_tpl_file;
プライベート $_parser;
プライベート $_debug;
パブリック関数 Stupid() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('エラー: テンプレート フォルダーとコンパイル フォルダーを正しく設定してください');
}
パブリック関数 assign($var, $value)
{
if(isset($var) && トリム($var) != '') {
$this->_tpl_vars[$var] = $value;
true を返します。
} それ以外 {
exit('エラー: 変数名を設定してください');
}
}
パブリック関数の表示($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('エラー: テンプレート ファイルが存在しません');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = 新しい StupidParser();
$this->_parser->compile($tpl_file);
}
$parsed_file を含める;
関数デバッグ($tpl_file)
{
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
$this->_debugger->start();
} それ以外 {
exit('エラー: デバッガ クラス ファイルが存在しません');
}
}
}
?>