01/10/2018, 16:50

Bài 02: Hướng dẫn sử dụng Smarty template

Thường khi viết PHP theo hướng viết thuần thì mọi người khi viết code PHP chung với HTML việc này gây khó khăn trong việc bảo trì. Việc dùng template giúp code bạn dễ đọc hơn hữu ích trong môi trường làm việc nhóm. Một số template hỗ trợ encape giúp web thêm bảo mật. Hiện nay có ...

Smarty

  • Thường khi viết PHP theo hướng viết thuần thì mọi người khi viết code PHP chung với HTML việc này gây khó khăn trong việc bảo trì. Việc dùng template giúp code bạn dễ đọc hơn hữu ích trong môi trường làm việc nhóm. Một số template hỗ trợ encape giúp web thêm bảo mật.

  • Hiện nay có rất nhiều template như Blade trong laravel, Twig, Brainy, Yats, Smarty ... nhưng hôm nay mình xin giới thiệu Smarty một trong những template lâu đời nhất và mình cực kỳ yêu thích nó vì tính đơn giản & dễ dùng.

1. Bắt đầu

  • Download thư viện Smarty mới nhất tại địa chỉ http://www.smarty.net/download

  • Giải nén Smarty và Import vào mã nguồn của ứng dụng.

  • Sau khi giải nén bạn vào sẽ thấy một folder có tên là lib là core của template và folder demo trong đó sẽ là cấu trúc Smarty chúng ta cần quan tâm , trong demo có templates là nơi chứa những view chúng ta cần làm việc. Ở trong bài mình sẽ tạo một folder là smarty và copy lib và demo vào.

  • Tạo file index.php như sau để bắt đầu :

require_once '../smarty/libs/Smarty.class.php';
$smarty= new Smarty;
$smarty->debugging = false;
//$smarty->caching= false;
//$smarty->cache_lifetime = 60;
$smarty->setCompileDir('../smarty/templates_c/');
$smarty->setConfigDir('../smarty/configs/');
$smarty->setCacheDir('../smarty/cache/');
$smarty->setTemplateDir('../smarty/templates/');

Lưu ý: Caching nếu để là true thì khi load lại trang sẽ nhanh hơn vì đã lưu vào bộ nhớ đệm. cache_lifetime là thời gian tái tạo lại cache tính bằng phút. Sử dụng caching cẩn thận nếu là trang hay thay đổi mọi người không nên sử dụng hoặc để thời gian caching ngắn.

Hoặc bạn có thể theo dõi video phía dưới.

2. Biến

Như các bạn đã biết thì code PHP và template là tách biệt lên khi muốn truyền biến PHP qua template chúng ta sử dụng assign('name',value).

Chúng ta sẽ theo dõi một ví dụ trong file index.php.

$smarty->display chúng ta chọn view nào sẽ hiển thị.

$name='Sinh Viên';
$smarty->assign('name',$name);
$smarty->display('view.tpl');

Như trên mình đã đề cập các file view chúng ta để trong demo/templates và có đuổi là .tpl. In biến ra {$name} file view.tpl

// File view.tpl
<!DOCTYPE html>
<html>
<head>
	<title>Smarty Template Demo</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
	Xin chào mừng {$name} tới www.chiasephp.net
</body>
</html>

3. Một số hàm cơ bản

1. Hàm assign()

Hàm này dùng để gán/xuất một giá trị hoặc một biến cho template.

Cú pháp:

void assign(mixed var);

void assign(string varname,mixed var);

Ví dụ 01: assign một biến ra ngoài view.

global $smarty;

$name = 'Nguyễn Văn A';
$smarty->assign('name', $name);

Ví dụ 02: assign một mảng (Array)

global $smarty;

$languages = array();
$languages[] = 'PHP';
$languages[] = 'MySQL';
$languages[] = 'Javascript';
$languages[] = 'HTML/CSS';

$smarty->assign('languages',$languages);

// Template
{$languages|@var_dump}

Ví dụ 03: assign một object

global $smarty;
	
class SinhVien{
    // Thuộc tính
    private $HoTen	= ';
    private $Age	= ';
    
    // Phương thức
    function __construct($Hoten, $Age){
        $this->HoTen = $Hoten;
        $this->Age = $Age;
    }
    function getName(){
        return $this->HoTen;
    }
}
// Khai báo đối tượng
$sinhvien = new SinhVien('Nguyễn Văn A', 20);
$smarty->assign('sinhvien', $sinhvien);
// Template
{$sinhvien|@var_dump}

2. Hàm {if},{elseif},{else}{/if}

Hàm này cũng giống với hàm  if..else trong PHP.  Nó là hàm điều kiện.

Cú pháp:

{if dieu_kien_1}
    //Some code
{elseif dieu_kien_2}
    //Some code
{else}
    //Some code
{/if}

Ví dụ 03: Câu lệnh if..else lồng đơn giản

{if $gender eq 'Male'}
    Nam giới
{elseif $name eq 'Female'}
    Nữ giới
{else}
    Giới tính khác
{/if}

{* Ví dụ với toán tử logic "or" *}
{if $gender eq 'Male' or $gender eq 'Female'}
   ...
{/if}

{* Hoặc có thể viết *}
{if $gender == 'Male' || $gender == 'Female'}
   ...
{/if}

Một số toán tử so sánh trong Smarty.

Toán tửKý hiệuCú phápÝ nghĩaPHP
== eq $a eq $b so sánh bằng ==
!= ne, neq $a neq $b Không bằng !=
> gt $a gt $b Lớn hơn >
< lt $a lt $b Nhỏ hơn <
>= gte, ge $a ge $b Lơn hơn hoặc bằng >=
<= lte, le $a le $b Nhỏ hơn hoặc bằng <=
===   $a === 0 check for identity ===
! not not $a Phủ định !

3. Hàm {foreach},{foreachelse}{/foreach}

Hàm này được sử dụng để lặp qua mảng dữ liệu.

Cú pháp:

{foreach $arrayvar as $itemvar}...{/foreach}

{foreach $arrayvar as $keyvar=>$itemvar}...{/foreach}

4. Hàm {section} ...{/section}

Cũng giống với hàm {foreach} hàm này cũng được dùng để lặp dữ liệu.

Cú pháp:

{section name=$var start=$start loop=$loop step=$step}
  // Some code
{/section}

Hai thuộc tính bắt buộc là name và loop.

Trong đó:

  • $var: Là một biến chứa chỉ mục của còng lặp
  • $start: Định nghĩa chỉ mục bắt đầu. Mặc định = 0
  • $loop: Số(10,20...) | Mảng ($listStudents, $listProduct)
  • $step: Bước nhảy của vòng lặp Tăng(e.g +1, +2..) | Giảm(e.g -1, -2)

Ví dụ 04: Thực hiện vòng lặp từ số 0 -> 10

{section name=i loop=10}
	<p>Vòng lặp thứ {$i}</p>
{/section}

Ví dụ 05: Lặp một mảng

[PHP]

global $smarty;	

$sinhvien[] = array('name' => 'Nguyễn Văn A','age'=> 20);
$sinhvien[] = array('name' => 'Đào Văn B','age'=> 23);
$sinhvien[] = array('name' => 'Triệu Văn C','age'=> 25);
//assign to view
$smarty->assign('sinhvien', $sinhvien);

[Template]

{section name=i loop=$sinhvien}

Họ và tên: {$sinhvien[i].name} Tuổi: {$sinhvien[i].age}

{/section}

5. Một số hàm định dạng cơ bản.

  • {$tile|upper} Viết hoa $title

  • {$tile|lower} Viết thường $title

  • {$tile|capitalize} Viết hoa đầu từ $title

  • {$tile|strip_tags} Xóa bỏ hết các thẻ HTML trong $title

  • {$date|date_format} Định dạng ngày thàng $date

4. Tổng kết

Qua phần này mình hy vọng mọi người đã hiểu về template cũng như Smarty. Phần tiếp theo mình sẽ hướng dẫn mọi người các câu lệnh nâng cao về smarty. Chúc mọi người vui vẻ !!

0