10/10/2018, 10:52
Dành cho những ai yêu thích "món" tự tạo template engine
Mình đọc qua bài poll dùng template engine, thấy các bác cũng máu me trong việc tự tạo engine. Tiện đây xin mở topic này thảo luận về vấn đề tự tạo, các bác có thể trình diễn hàng của mình, cũng như đóng góp ưu nhược template engine của người khác.
Ví dụ một bài giới thiệu:
Tên engine:
Phát triển dựa trên:
Một số cú pháp sử dụng cơ bản:
Số dòng code:
Ưu điểm gì:
Khuyết điểm gi:
Những tính năng tương lai:
Mọi người tham giá nhé
Ví dụ một bài giới thiệu:
Tên engine:
Phát triển dựa trên:
Một số cú pháp sử dụng cơ bản:
Số dòng code:
Ưu điểm gì:
Khuyết điểm gi:
Những tính năng tương lai:
Mọi người tham giá nhé
Bài liên quan
Tên : không có
Phát triển dựa trên: PHP
Một số cú pháp sử dụng cơ bản: Xem dưới
Số dòng code: cực ít
Ưu điểm gì: Cực nhanh vì chỉ gọi biến mà không xử lý ký tự, có thể chèn thẳng code php vào trong template
Khuyết điểm gi: Để lại commment trong HTML, phải dùng 1 lệnh cuối cùng để cho ra kết quả.
Những tính năng tương lai: Chưa nghĩ ra.
<?php
//VD
$page=new class_hai;
// khoi tao voi file template
// file template chứa html và cái ký tự biến như $noidunggiua,$noidungtrai
// file template chứa nội dung vòng lặp VD:
// $begin_loop
// $id $ten $gia
// $end_loop
$page->create_content('templates.html');
// thay the bien
$page->replace_value('$noidunggiua',$biennoidunggiua);
$page->replace_value('$noidungtrai',$biennoidungtrai);
// thay the vong lap
$key_array=array('$id','$ten','$gia');
$row_array[]=array(1,'san pham 1',1000000);
$row_array[]=array(2,'san pham 2',2000000);
$page->replace_loop('',$key_array,$row_array);
$page->create_template();
echo $page->content;
?>
<?php //đây là core chính
class class_hai
{
function create_content($template)
{
$this->content = @file_get_contents($template) or die ('Khong tim thay file giao dien '.$template);
}
function replace_value($key,$value)
{
$this->replace_array[]=array($key,$value);
}
function replace_element($key,$value)
{
$this->content=str_replace($key,$value ,$this->content);
}
function replace_loop($key,$key_array,$row_array)
{
if(count($row_array)>0)
{
$loop_content='/*'.$this->content.'*/';
foreach($key_array as $ka)
{
$i_ndot++;
eval($ka.'=$ka;');
$command.=$ka.'=$ra['.($i_ndot-1).'];';
}
if($this->replace_out_loop!=TRUE or !isset($this->replace_out_loop))
{
if(count($this->replace_array)>0)
{
foreach($this->replace_array as $ra)
{
@eval($ra[0].'=$ra[1];');
}
}
}
$begin='*/
foreach($row_array as $ra)
{
'.$command.'
$piece.=<<<CHEN
';
$end='
CHEN;
}
/*
';
${begin_loop.$key}=$begin;
${end_loop.$key}=$end;
eval('$content=<<<CHEN
'.$loop_content.'
CHEN;
');
eval($content);
$key='loop'.$key;
$this->replace_loop_array[]=array($key,$piece);
}
}
function create_template()
{
if(count($this->replace_array)>0)
{
foreach($this->replace_array as $ra)
{
@eval($ra[0].'=$ra[1];');
}
}
if(count($this->replace_loop_array)>0)
{
foreach($this->replace_loop_array as $rla)
{
${begin_.$rla[0]} = $rla[1].'<!--';
${end_.$rla[0]} = '-->';
}
}
@eval('$content=<<<CHEN
'.$this->content.'
CHEN;
');
$this->content=$content;
}
}
?>
+ Tên: bóc tem (template) mà vẫn còn gin (engine)
+ Phát triển dựa trên ASP.NET
+ Số dòng code: tầm 2000 dòng
+ Ưu điểm thay thế cấu trúc template hiện tại của ASP.NET
+ Nhược điểm do sử dụng template engine này đồng nghĩa với việc rời xa cấu trúc __VIEW_STATE__ và runat="server". Trở lại thời nguyên thủy xử lý request cơ bản
+ Một số ví dụ sử dụng template