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é
ngoc_viet08 viết 13:00 ngày 10/10/2018
template engine là gì ?
anhchanghaudau viết 12:54 ngày 10/10/2018
Được gửi bởi ngoc_viet08
template engine là gì ?
Là một dạng hệ thống chuyển hóa từ dữ liệu nguồn theo một cú pháp nhất định sang một dạng hiển thị khác (có thể hiểu là sang HTML)
haicop viết 13:01 ngày 10/10/2018
Mình xin phép share template engine của mình

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;
}
}
?>
anhchanghaudau viết 12:53 ngày 10/10/2018
Hay đó bác, quả ngắn thiệt, nhưng mình nghĩ bác nên post cái cách sử dụng bên phía file template chứ đừng post code lập trình. Ví dụ, mình có cái template engine (gọi cho oách)

+ 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

Code:
[@myVariable]
[@myVariable.property]
[@myVariable.property:format expression]


[@now:dd/MM/yyyy] // in ra ngày hiện tại the dạng dd/MM/yyyy
[#begin=100] // lặp 100 lần
   Hello world // nội dung cần in
[#end]

[#begin=my.db(SELECT * FROM products).rows]
    <img src="[@data(image),attr]"/> // in ra giá trị image của row và encode html
    <a href="[@my.site]product/[@data(id)]">[@data(title),-30T,htmle]</a> // in ra giá trị title của row và cắt lấy 30 ký tự sau đó encode html
[#end]


[#if:expression]
 // true
[#else:expression] // else if
[#else:expression] // else if
[#else]
 // false
[#end:if]


[#set:varNam=varValue]
...
ngoc_viet08 viết 13:08 ngày 10/10/2018
thấy nó thừa , thay vì viết 1 code php thì mình đi viết 1 code ko phải php cũng ko phải html. chỉ khổ cho người khác xem code. ko ủng hộ temp engine.
FeS viết 12:52 ngày 10/10/2018
Gây overhead, ko thích TE
sacroyant viết 13:05 ngày 10/10/2018
Được gửi bởi ngoc_viet08
thấy nó thừa , thay vì viết 1 code php thì mình đi viết 1 code ko phải php cũng ko phải html. chỉ khổ cho người khác xem code. ko ủng hộ temp engine.
Cách đây vài năm, sau chừng 2 ngày vọc Smarty, tớ bắt đầu có quan điểm y như bạn. Template engine dùng để giúp designer đỡ phải quan tâm đến ngôn ngữ lập trình, còn dân chuyên về programming thì nên dành nó lại xem xét khi chả còn việc gì làm nữa
ngoc_viet08 viết 13:05 ngày 10/10/2018
Cách đây vài năm, sau chừng 2 ngày vọc Smarty, tớ bắt đầu có quan điểm y như bạn. Template engine dùng để giúp designer đỡ phải quan tâm đến ngôn ngữ lập trình, còn dân chuyên về programming thì nên dành nó lại xem xét khi chả còn việc gì làm nữa
thay vì học code php xuất dữ liệu khá thông dụng (chỉ gồm echo , foreach, while , if ...)thì họ lại đi học code của template enginje chả mấy thông dụng , cách viết thì nhái lại php từ echo biến cho đến vòng lặp .=]]
anhchanghaudau viết 12:59 ngày 10/10/2018
Được gửi bởi ngoc_viet08
thay vì học code php xuất dữ liệu khá thông dụng (chỉ gồm echo , foreach, while , if ...)thì họ lại đi học code của template enginje chả mấy thông dụng , cách viết thì nhái lại php từ echo biến cho đến vòng lặp .=]]
Cái gì cũng có ưu khuyết cả, nhưng template engine làm ra không phải chỉ cho mình programmer dùng, cũng không hẳn dành cho PHP. Lấy đơn cử là XSLT, bạn có thể không cần biết C#, không cần biết PHP, bạn chỉ quan tâm đến cú pháp XSLT, còn bên dưới nó dùng ngôn ngữ gì, nền tảng gì, thì chả can hệ. Và cú pháp template engine là tập nhỏ của ngôn ngữ lập trình. tránh đi sự rườm rà, câu nệ về cú pháp của NNLT, bạn sẽ học lẹ hơn
Bài liên quan
0