หลังจากที่คลาส Simplet เปิดตัวครั้งที่แล้ว ( http://bbs.phpchina.com/thread-85257-1-1.html ) พบว่ามีข้อบกพร่องหลายประการ เช่น ไม่รองรับอาร์เรย์หลายมิติ ความคิดเห็น และไม่มี ฟังก์ชั่นแคช คราวนี้ฉันเพิ่มคุณสมบัติทั้งหมดนี้! - -
หากคุณสนใจ ฉันจะเผยแพร่บทช่วยสอนในครั้งต่อไปเพื่อพูดคุยเกี่ยวกับแนวคิดและวิธีการเขียนชั้นเรียนนี้ - - หากคุณสนับสนุนคุณสามารถติดตามและสนับสนุนฉันได้!
รหัส PHP:
simplet.class.php
<?php
คลาส SimpleT {
$t_vars ส่วนตัว;
ส่วนตัว $templates_dir;
$templates_c_dir ส่วนตัว;
$แคชส่วนตัว;
ส่วนตัว $cache_dir;
ฟังก์ชั่นสาธารณะ __ สร้าง () {
$this->templates_dir = './templates/';
$this->templates_c_dir = './templates_c/';
$นี่->แคช = 0;
$this->cache_dir = './cache/';
-
ฟังก์ชั่นสาธารณะ setDir($dir, $type = 'template') {
ถ้า(is_dir($dir)) {
ถ้า($type == 'เทมเพลต')
$this->templates_dir = rtrim($dir, '/').'/';
elseif($type == 'template_c')
$this->templates_c_dir = rtrim($dir, '/').'/';
elseif($type == 'แคช')
$this->cache_dir = rtrim($dir, '/').'/';
อื่น
กลับเท็จ;
กลับเป็นจริง;
} อื่น {
กลับเท็จ;
-
-
แคชฟังก์ชั่นสาธารณะ ($ เวลา) {
ถ้า(is_numeric($เวลา)) {
$นี่->แคช = $เวลา;
กลับเป็นจริง;
} อื่น {
กลับเท็จ;
-
-
กำหนดฟังก์ชั่นสาธารณะ ($var, $value = NULL) {
ถ้า (is_array($var)) {
foreach ($var เป็น $key => $val) {
$this->t_vars[$key] = $val;
-
} อื่น {
$this->t_vars[$var] = $value;
-
-
ฟังก์ชั่นส่วนตัว คอมพ์ ($ ชื่อไฟล์) {
พยายาม {
ถ้า(!$fp = fopen($ชื่อไฟล์ 'r')) {
Throw new Exception('ไม่สามารถเปิดได้' . $filename);
-
$filesize = ขนาดไฟล์($ชื่อไฟล์);
ถ้า($ขนาดไฟล์ <= 0) {
Throw new Exception('ขนาดไฟล์ต้อง > 0 ' );
-
$content = fread($fp, $ขนาดไฟล์);
fclose($fp);
ไม่ได้ตั้งค่า($fp);
$content = preg_replace("/<%=([$a-zA-Z0-9_]{1,})%>/","<?php echo \$$1 ;?>", $content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop%>/", "<?php foreach( \$$1 เป็น \$$1_key => \$$1_val ) { ?>",$content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,})) %>/", "<?php foreach( \$$1 as \$$2 ) { ?>", $content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,}),( [$a-zA-Z0-9_]{1,}))%>/", "<?php foreach( \$$1 as \$$2 => \$$3 ) { ?>", $เนื้อหา);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).key%>/", "<?php echo \$$1_key ;?>", $ เนื้อหา);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).value%>/", "<?php echo \$$1_val ;?>", $ เนื้อหา);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,})\?%>/", "<?php if( \$$1 == true) { ? >", $เนื้อหา);
$content = preg_replace("/<%end%>/","<?php } ?>", $content);
$content = preg_replace("/<%##common##%>([^<%##end##%>]{0,})<%##end##%>/", "<?php n/* $1 */n?>", $content);
ถ้า (preg_match_all("/<%{([^(}%>)]{1,})}%>/", $content, $files)) {
$this->comp($this->templates_dir . $files[1][0]);
-
$content = preg_replace("/<%{([^(}%>)]{1,})}%>/", "<?php รวม '{$this->templates_c_dir}simplet_comp_$1.php'; ? >", $เนื้อหา);
สะท้อน $content;
$fp = fopen($this->templates_c_dir . 'simplet_comp_' . basename($filename) . '.php', 'w');
ถ้า(!fwrite($fp, $content)) {
Throw new Exception('ไม่สามารถเขียนเนื้อหาใน ' . $filename);
-
fclose($fp);
} จับ (ยกเว้น $e) {
เสียงสะท้อน $e->getMessage();
-
กลับเป็นจริง;
-
จอแสดงผลฟังก์ชั่นสาธารณะ ($ ชื่อไฟล์) {
$filename = $this->templates_dir .
ถ้า(!file_exists($ชื่อไฟล์)) {
กลับเท็จ;
-
$t_filename_c = $this->templates_c_dir 'simplet_comp_' . basename($filename) .'.php';
if(!file_exists($t_filename_c) || filemtime($t_filename_c) < filemtime($filename)) {
$this->comp($ชื่อไฟล์);
-
ถ้า($นี่->แคช > 0) {
$cache_file = $this->cache_dir . basename($filename);
if(!file_exists($cache_file) || (เวลา() - filemtime($cache_file)) > $this->cache) {
ob_start();
foreach ($this->t_vars เป็น $key => $val) {
$$คีย์ = $val;
-
รวม($t_filename_c);
$content = ob_get_contents();
ob_end_clean();
$fp = fopen($cache_file, 'w');
fwrite($fp, $content);
fclose($fp);
สะท้อน $content;
ไม่ได้ตั้งค่า($เนื้อหา);
} อื่น {
รวม($cache_file);
-
} อื่น {
foreach ($this->t_vars เป็น $key => $val) {
$$คีย์ = $val;
-
รวม($t_filename_c);
-
-
-
?>
รหัส PHP:
test.php
<?php
need_once('simplet.class.php');
$t = ใหม่ SimpleT();
$t->cache(10);//เปิดใช้งานฟังก์ชันแคชและตั้งเวลาหมดอายุเป็น 10 วินาที
$t->มอบหมาย('อาร์เรย์', อาร์เรย์(อาร์เรย์('สวัสดี', 'โลก')));
$t->มอบหมาย('เงื่อนไข',เท็จ);
$t->display('index.php');
?>
รหัส PHP:
index.php (ไฟล์เทมเพลต, วางไว้ใน templates/ โฟลเดอร์)
<%##common##%>
นี่คือความคิดเห็น และด้านล่างคือลูปอาร์เรย์หลายมิติ
<%##สิ้นสุด##%>
<%arrays.loop(ค่า)%>
<%value.loop(ชื่อ)%>
<%=ชื่อ%>
<%สิ้นสุด%>
<%สิ้นสุด%>
<%##ทั่วไป##%>
ต่อไปนี้เป็นการตัดสินแบบมีเงื่อนไข
<%##สิ้นสุด##%>
<%เงื่อนไข?%>
<h1>เงื่อนไขเป็นจริง</h1>
<%สิ้นสุด%>
<%##ทั่วไป##%>
ด้านล่างนี้เป็นไฟล์รวม ()
<%##สิ้นสุด##%>
<%{ชื่อไฟล์.php}%>