#phpchina ขยาย户#
Smarty ถูกมองว่าเป็นสิ่งที่ซ้ำซ้อนมาโดยตลอด ฉันคิดว่าคนที่คิดว่า Smarty ซ้ำซ้อนนั้นซ้ำซ้อน .... อย่าพูดถึงเรื่องนี้อีกต่อไป วันนี้ผมจะสอนวิธีเขียน Template Engine เพื่อให้ทุกคนสามารถเขียน Template Engine ของตนเองได้ หลังจากอ่านบทความนี้แล้ว ความเข้าใจของคุณเกี่ยวกับ 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 คืออ็อบเจ็กต์การดีบัก ซึ่ง
มีการกำหนดค่าคงที่สองค่าไว้ด้านล่าง ซึ่งใช้ในการจัดเก็บโฟลเดอร์เทมเพลตและโฟลเดอร์การคอมไพล์:
กำหนด('TPL_DIR', './templates/');
กำหนด('TPL_C_DIR', './templates_c/');เริ่ม
เขียนโค้ด>>>
<?php
กำหนด('TPL_DIR', './templates/');
กำหนด ('TPL_C_DIR', './templates_c/');
คลาสโง่ {
ส่วนตัว $_tpl_vars;
ส่วนตัว $_tpl_file;
ส่วนตัว $_parser;
ส่วนตัว $_debugger;
-
?>
เริ่มเขียน Constructor >>>
ฟังก์ชั่นสาธารณะ Stupid() {
ถ้า(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('ข้อผิดพลาด: โปรดตั้งค่าโฟลเดอร์เทมเพลตและโฟลเดอร์รวบรวมอย่างถูกต้อง');
-
}
ใน Constructor เรากำหนดว่าเส้นทางเทมเพลตและเส้นทางการคอมไพล์ได้รับการตั้งค่าอย่างถูกต้องหรือไม่
ออกแบบวิธีการของเราส่วนใหญ่มีวิธีการดังต่อไปนี้:
มอบหมาย(), set_tpl_dir(), set_parsed_dir(), จอแสดงผล(), ดีบัก()
กำหนด () วิธีการ:
วัตถุประสงค์ของ มอบหมาย() คือการตั้งค่าตัวแปรเทมเพลต โค้ดมีดังนี้ >>>
ฟังก์ชันสาธารณะ มอบหมาย($var, $value) {
if(isset($var) && ตัด($var) != '') {
$this->_tpl_vars[$var] = $value;
กลับเป็นจริง;
} อื่น {
exit('ข้อผิดพลาด: กรุณาตั้งชื่อตัวแปร');
-
-
ก่อนอื่นเราจะพิจารณาว่าผู้ใช้ได้ตั้งชื่อตัวแปรหรือไม่ ใช้ isset($var) && trim($var) != '' เพื่อกำหนด trim($var) != '' ป้องกันไม่ให้ผู้ใช้ตั้งชื่อตัวแปรด้วยการเว้นวรรค หากตั้งค่าไว้หากตัวแปรถูกต้องเราจะบันทึกลงในตัวแปรสมาชิก _tpl_vars
วิธีการ
เมธอด display() เป็นเมธอดที่สำคัญที่สุดในคลาส Stupid ใช้เพื่อแสดงและตรวจสอบว่าเทมเพลตได้รับการอัปเดตหรือไม่ หากไม่ได้รับการอัปเดตจะเป็นไฟล์ต้นฉบับที่คอมไพล์แล้ว จะใช้
โค้ดดังนี้ >>>
public function display( $tpl_file) {
$template_file = TPL_DIR.$tpl_file;
ถ้า(!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)) {
need_once './stupid_parser.class.php';
$this->_parser = ใหม่ StupidParser();
$this->_parser->คอมไพล์($tpl_file);
-
รวม $parsed_file;
}
เมธอดนี้เป็นไปตามคำสั่ง !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file) เพื่อพิจารณาว่าไฟล์เทมเพลตได้รับการอัพเดตหรือไม่ หากยังไม่ได้คอมไพล์หรือ ไฟล์เทมเพลตได้รับการอัปเดตแล้ว จะต้องคอมไพล์ใหม่ เราจะแนะนำไฟล์เทมเพลตที่คอมไพล์แล้ว เป็นไฟล์ PHP ธรรมดา
() วิธีการ
เมธอด Debugg() นั้นค่อนข้างง่าย ซึ่งก็คือการแนะนำไฟล์โง่_debugger.class.php สร้างอ็อบเจ็กต์ StupidDebuger และเรียกเมธอดเริ่มต้นของ StupidDebuger สำหรับการดีบัก
โค้ดจะเป็นดังนี้ >>>
public function debug ($tpl_file ) {
ถ้า (include_once("stupid_debugger.class.php")) {
$this->_debugger = StupidDebugger ใหม่(TPL_DIR. $tpl_file);
$นี่->_ดีบักเกอร์->เริ่มต้น();
} อื่น {
exit('ข้อผิดพลาด: ไม่มีไฟล์คลาสดีบักเกอร์');
-
}
ณ จุดนี้ คลาส Stupid ของเราเสร็จแล้ว! ครั้งต่อไปฉันจะแนะนำการเขียนคลาส StupidParser โปรดสนับสนุนต่อไป หากคุณมีความคิดเห็นหรือข้อเสนอแนะ คุณสามารถเสนอแนะ
ได้
!
กำหนด('TPL_DIR', './templates/');
กำหนด('TPL_C_DIR', './templates_c/');
ชั้นเรียนโง่ {
ส่วนตัว $_tpl_vars;
ส่วนตัว $_tpl_file;
ส่วนตัว $_parser;
ส่วนตัว $_debug;
ฟังก์ชั่นสาธารณะโง่ () {
ถ้า(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('ข้อผิดพลาด: โปรดตั้งค่าโฟลเดอร์เทมเพลตและโฟลเดอร์รวบรวมอย่างถูกต้อง');
-
}
กำหนดฟังก์ชันสาธารณะ($var, $value) {
if(isset($var) && ตัด($var) != '') {
$this->_tpl_vars[$var] = $value;
กลับเป็นจริง;
} อื่น {
exit('ข้อผิดพลาด: กรุณาตั้งชื่อตัวแปร');
-
}
จอแสดงผลฟังก์ชั่นสาธารณะ($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
ถ้า(!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)) {
need_once './stupid_parser.class.php';
$this->_parser = ใหม่ StupidParser();
$this->_parser->คอมไพล์($tpl_file);
-
รวม $parsed_file;
}
แก้จุดบกพร่องของฟังก์ชัน($tpl_file) {
ถ้า (include_once("stupid_debugger.class.php")) {
$this->_debugger = StupidDebugger ใหม่($this->_template_dir . $tpl_file);
$นี่->_ดีบักเกอร์->เริ่มต้น();
} อื่น {
exit('ข้อผิดพลาด: ไม่มีไฟล์คลาสดีบักเกอร์');
-
-
-
-