Cách sử dụng Smarty trong PHP
Smarty là một công cụ template engine mạnh mẽ và linh hoạt dành cho PHP, giúp tách biệt rõ ràng giữa logic xử lý và giao diện của ứng dụng. Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt và sử dụng Smarty để xây dựng các ứng dụng PHP một cách hiệu quả.

1. Giới thiệu về Smarty
Smarty là một công cụ template engine cho PHP, được thiết kế để tách biệt phần giao diện (HTML) và logic ứng dụng (PHP). Smarty giúp giảm sự phụ thuộc giữa hai phần này, giúp mã nguồn dễ quản lý và bảo trì hơn.
2. Cách sử dụng Smarty
2.1. Truyền dữ liệu vào Template
Sử dụng phương thức assign trong PHP:
$smarty->assign('title', 'Trang chủ');
$smarty->assign('user', ['name' => 'Nguyễn Văn A']);
$smarty->display('example.tpl');
Trong file example.tpl:
<h1>{$title}</h1>
<p>Xin chào, {$user.name}</p>
2.2. Câu lệnh if trong Smarty
Dùng để kiểm tra điều kiện trong template.
Câu lệnh if đơn giản:
{if $age >= 18}
<p>Bạn là người trưởng thành.</p>
{else}
<p>Bạn chưa trưởng thành.</p>
{/if}
Kết hợp với elseif
{if $age < 18}
<p>Bạn là trẻ vị thành niên.</p>
{elseif $age < 60}
<p>Bạn là người trưởng thành.</p>
{else}
<p>Bạn là người cao tuổi.</p>
{/if}
Kiểm tra tồn tại của biến
{if isset($name)}
<p>Tên của bạn: {$name}</p>
{/if}
2.3. Vòng lặp trong Smarty
Smarty hỗ trợ các vòng lặp như foreach, for, và while.
Vòng lặp foreach
Dùng để lặp qua mảng.
Truyền mảng từ PHP:
$smarty->assign('products', [
['name' => 'Sản phẩm 1', 'price' => 100000],
['name' => 'Sản phẩm 2', 'price' => 200000],
]);
Hiển thị trong template
<ul>
{foreach $products as $product}
<li>{$product.name} - {$product.price} VND</li>
{/foreach}
</ul>
Lấy chỉ mục (index)
<ul>
{foreach $products as $index => $product}
<li>{$index + 1}. {$product.name} - {$product.price} VND</li>
{/foreach}
</ul>
Vòng lặp for
Dùng để lặp qua số lần cố định.
{for $i=1 to 5}
<p>Số: {$i}</p>
{/for}
Vòng lặp while
Dùng cho điều kiện phức tạp (ít dùng).
Truyền từ PHP
$smarty->assign('count', 0);
Sử dụng trong template
{while $count < 5}
<p>Đếm: {$count}</p>
{assign var="count" value=$count+1} {/while}
3. Hàm trong Smarty
Smarty hỗ trợ nhiều hàm mặc định và cho phép bạn tạo hàm tùy chỉnh.
3.1. Hàm mặc định
- Escape chuỗi:
<p>Email: {$email|escape}</p>
- Format số:
<p>Giá: {10000|number_format:2:",":"."} VND</p>
- Chuyển đổi chữ hoa/chữ thường:
<p>Tên: {$name|upper}</p>
<p>Tên viết thường: {$name|lower}</p>
3.2. Tạo hàm tùy chỉnh
Bạn có thể tạo hàm PHP và sử dụng trong template. Đăng ký hàm PHP
function greetUser($params, $smarty) {
return "Xin chào, " . $params['name'];
}
$smarty->registerPlugin("function", "greetUser", "greetUser");`
Sử dụng trong template
`
<p>{greetUser name=$name}</p>
4. Kết hợp nâng cao
Lồng if và foreach
<ul>
{foreach $products as $product} {if $product.price > 150000}
<li>{$product.name} - {$product.price} VND</li>
{/if} {/foreach}
</ul>
Gán biến trong vòng lặp
{foreach $products as $product} {assign var="discountedPrice"
value=$product.price*0.9}
<li>{$product.name} - Giá sau giảm: {$discountedPrice} VND</li>
{/foreach}
5. Ưu điểm của Smarty
- Tách biệt rõ ràng giao diện và logic: Giúp lập trình viên và designer làm việc độc lập.
- Hỗ trợ cache mạnh mẽ: Cải thiện hiệu suất khi xử lý trang web có lượng truy cập lớn.
- Dễ mở rộng: Có thể thêm các hàm tùy chỉnh và plugin.
- Cú pháp dễ học: Gần gũi với HTML và dễ tiếp cận với người mới.
- Quản lý code tốt hơn: Giảm sự lặp lại với khả năng tái sử dụng template.