Sử dụng template trong PHP - cơ bản 2007-07-09 09:19:18
Trong bài viết này minh giới thiệu về cách dùng file .tpl. Đối với những ứng dụng viết cho nhiều người sử dụng ( cụ thể là những web cần chỉnh sửa giao diện nhiều: forum phpbb). Với cách viết thông thường, mỗi lần thay đổi giao diện bạn sẽ fải edit tòan bộ code, như vậy xác suất dẫn đến lỗi code rất cao chưa kể đến người edit giao diện cần fải có hiểu biết về php mới sữa được. Nên đối với những ứng dụng này bạn nên viết theo kiểu template. Template là những file tạo giao diện cho website và thường độc lập vơi code. định dạng file thường dùng trong template là .tpl ( kô bắt buộc, bạn có thể chọn đuôi khác miễn sao bạn thấy dễ dàng sử dụng là được). Khi đó cứ mỗi lần bạn thay đổi giao dịên chỉ cần edit lại các file .tpl là xong và vì nó ko chứa các mã PHP nên bạn kô cần fải là người rành về php mới edit được như vậy ứng dụgn của bạn sẽ được phổ biến rộng hơn.
Để dễ hiểu tôi sẽ tạo một ví dụ sử dụgn template đơn giản để dễ hiểu:
ví dụ:
Bạn có một trang web in các ngày hiện hành:
file calender.php có nội dung như sau:
<?
$ngay = $_GET['date'];
print "Hôm nay là ngày:".$ngay;
?>
Khi gọi calender.php?date=04-09-2006 thì kết quả sẽ là :
Hôm nay ngày: 04-09-2006
Đây là cách viết thông thường, giả sử bây giờ bạn muôn thêm câu "Welcome to phpbasic.com" fía dười dòng "Hôm nay ngày 04-09-2006"
Bạn sẽ edit lại file calender.php như sau:
<?
// kết nối csdl
$ngay = $_GET['date'];
print "Hôm nay là ngày:".$ngay;
print "Welcome to phpbasic.com";
?>
hoặc là
<?
// kết nối csdl
$ngay = $_GET['date'];
print "Hôm nay là ngày:".$ngay;
?>
Welcome to phpbasic.com
Ở đây chỉ có một dòng code nên bạn dễ dàng edit , bạn thữ nghĩ nếu nó là một ứng dụng thì bạn sẽ tìm chỗ để thêm câu đó vào cũng là một vấn đề chưa kể xác suất gây ra lỗi rất cao và càng khó khăn hơn cho những ngừơi kô rành về php.
Để giải quyết bạn viết theo kiểu template như sau:
tạo 2 file riêng rẽ, một file code .php và một file giao diện .tpl
tạo file giao dien template.tpl như sau:
<html>
<body>
Hôm nay là ngày: $ngay
Welcome to phpbasic.com
</body>
</html>
file code calender.php có nội dung như sau:
<?
$ngay = $_GET['date'];
$file = file_get_contents("template.tpl"); //đọc nội dung file .tpl
print str_replace('$ngay',$date,$file); // tìm và thay thế chữ $ngay trong file .tpl bằng biến $ngay trong file calender.php
?>
Kết quả của file calender.php này khi view trên trình duyệt cũng giống như là dùng kiểu bình thường , nhưng bây giờ bạn muốn edit lại giao diện bạn chỉ cần sữa lại file .tpl và chỉ cần giữ lại chữ $ngay là được, như vậy một người kô biết về code cũng có thể edit được nội giao diện của ứng dụng.
Đây là ví dụ đơn giản, hi vọng giúp bạn hiểu fần nào về .tpl
Tác giả :TG
Tra loi 19 comment(s) 2007-07-09 09:19:18
TK 2007-07-26 08:39:27
Nhưng mỗi lần có 1 biến lại phải sử dụng str_replace 1 lần. Rất mất thời gian. Nếu dùng
<?
$file = fopen("template.tpl");
?>
thì không phải thay thế gì cả.
Tra loi
GnuhNguyen 2007-12-04 08:17:01
Tra loi
Raulgonzalez 2007-12-04 09:27:45
Dùng Zend Framework cũng rất hay.
www.manhthang.net
Tra loi
babyblue 2007-12-08 03:08:06
Các bạn ở đây ai rành về PHPcake thì chỉ giáo mình với, đang làm nhưng tài liệu ít quá.
Riêng smarty thì tài liệu lại dư hì ai có thì trao đổi
Tra loi
Templates - Viết thêm bài hướng dẫn mở rộng 2007-12-08 06:47:44
Tra loi
koobi 2007-12-11 06:27:33
Tra loi
babyblue 2007-12-16 04:16:20
Tra loi
quỷ đỏ 2008-02-24 05:36:00
Vậy họ dùng kiểu nào vậy , thanks
Tra loi
cỏ úa 2008-02-24 11:53:06
Tra loi
gaulucky92 2008-02-25 11:24:39
http://www.smarty.net/manual/en/
Tui cũng đang xài Smarty... Mấy hàm tui thường dùng trong file php là assign (để gán dữ liệu) và display (để hiển thị file template), VD:
Trong file index.php:
$mess = "Hello";
$template->assign('mess',$mess);
$template->display('index.tpl');
Trong file index.tpl:
Như vậy khi gọi 1 file index.php trên trình duyệt bạn sẽ thấy chữ "Hello".
Còn nếu dữ liệu của bạn thuộc dạng mảng (array) thì cũng làm tương tự:
$mess = array("Hello! ","Welcome ","To ","My Site");
$template->assign('mess',$mess);
$template->display('index.tpl');
{$mess[0]}{$mess[1]}{$mess[2]}{$mess[3]}
Như vậy khi gọi file index.php bạn sẽ thấy dòng "Hello! Welcome to my site".
Nếu dữ liệu của bạn là vòng lặp, chẳng hạn như fetch nhiều dữ liệu từ database ra thì sử dụng {section}. Cái này tui ko rành lắm, xem tài liệu của smarty sẽ biết chi tiết hơn.
Tra loi
public 2008-03-23 08:33:35
<File Template: index.html>
{value}
<File: index.php>
//Mã gọi class của templatePower ở đây
$tpl = new TemplatePower("index.html");
$tpl->prepare();
$_value="Hello";
$tpl->assign("value",$_value);
$tpl->printToScreen();
Sau khi chạy thì file index.php sẽ in ra câu Hello
Tra loi
gaulucky92 2008-10-16 02:48:02
trong smarty thì làm đơn giản hơn:
file index.php
$tpl = new Smarty();
$_value="Hello";
$tpl->assign("value",$_value);
$tpl->display('index.tpl');
?>
file index.tpl
tui thấy smarty tiện ở chỗ tùy thích hiển thị bao nhiêu trang tpl cũng dc, chỉ cần $tpl->display("ten_file.tpl"); còn mấy tpl khác toàn cho hiển thị có 1 file tpl, muốn 2 file hóa ra phải gọi class lên 2 lần :(
Tra loi
nobody 2009-02-24 01:07:43
Tra loi
tinapc 2009-09-12 09:28:29
Chứ mình dùng hàm {include file = $name.tpl} trong Smarty thì khi mà trong 1 layout có nhiều block thì có một số block khôgn hiển thị dử liệu được - báo lỗi hoài.
Cảm ơn các bạn quan tâm
Tra loi
nguoivietnet88 2009-09-25 02:05:21
Trong content.tpl bạn chĩ việc include 4 tpl kia theo cách sau :{include file="header.tpl" title=$title1}{include file="news_left.tpl"}..............
Khi khó trang index.php chĩ việc display content tpl là ok rồi.
Tra loi
hungtm 2009-11-02 04:25:24
Tra loi
Lang Nguyen 2010-02-04 11:47:09
Tra loi
Conservative 2010-04-08 06:03:11
Lẽ ra phải là
Tra loi
vngoodjob 2010-04-30 05:11:26
nó.
Welcome to phpbasic.com
nhưng khi test thì đc kết quả nt này :
Welcome to phpbasic.com
chẳng thấy ngày tháng đau cả
Tra loi
Y kien