1. Giới thiệu về Smarty trong NukeViet
Smarty là một template engine cho PHP, dùng để tách biệt giao diện khỏi logic ứng dụng. NukeViet từ phiên bản 5 đã chuyển sang hỗ trợ Smarty thay cho XTemplate, giúp việc viết giao diện linh hoạt và hiện đại hơn.
2. Cài đặt và tích hợp Smarty
Smarty đã được tích hợp sẵn trong NukeViet 5. Bạn chỉ cần sử dụng các lớp và hàm có sẵn trong hệ thống:
Giao diện template nằm ở:
/themes
.Gọi từ module PHP:
$xtpl = new NukeViet\Template\SmartyTemplate('template_file.tpl', NV_ROOTDIR . '/themes/default/modules/mymodule');
$xtpl->assign('myvar', 'Hello Smarty!');
$contents = $xtpl->fetch();
3. Cấu trúc template sử dụng Smarty
Mỗi module có một thư mục tương ứng trong
/themes/[theme]/modules/[module]/
.Các file
.tpl
chứa nội dung giao diện.Có thể tách nhỏ các phần template như
header.tpl
,footer.tpl
,loop.tpl
, v.v.
4. Cú pháp cơ bản của Smarty
Gán biến
<p>{$myvar}</p>
Gọi hàm modifier
<p>{$username|capitalize}</p>
If...else
{if $logged_in}
<p>Xin chào {$username}!</p>
{else}
<p>Bạn chưa đăng nhập.</p>
{/if}
5. Các modifier và function thường dùng
escape
– chống XSS:{$title|escape:'html'}
date_format
:{$time|date_format:"%d/%m/%Y"}
truncate
:{$description|truncate:100:"..."}
6. Vòng lặp và điều kiện trong Smarty
Foreach
<ul>
{foreach $items as $item}
<li>{$item.name} - {$item.price}</li>
{/foreach}
</ul>
Section (ít dùng hơn)
{section name=i loop=$list}
{$list[i]}
{/section}
7. Giao tiếp giữa PHP và Smarty
Gán biến
$smarty->assign('username', 'Nguyen Van A');
Gán mảng
$products = [
['name' => 'San pham 1', 'price' => 1000],
['name' => 'San pham 2', 'price' => 2000],
];
$smarty->assign('products', $products);
8. Template inheritance và block
Tệp layout.tpl
<html>
<head><title>{block name=title}Tiêu đề{/block}</title></head>
<body>
{block name=content}{/block}
</body>
</html>
Tệp home.tpl
{extends file="layout.tpl"}
{block name=title}Trang chủ{/block}
{block name=content}
<h1>Xin chào!</h1>
{/block}
9. Quản lý layout và module trong NukeViet
Giao diện được chia theo module.
Có thể kế thừa layout chính (
layout.tpl
) cho toàn site.Các module gọi template tương ứng với
nv_module_theme()
hoặcnv_theme_module_function()
trong PHP.
10. Ví dụ nâng cao
Ví dụ: Hiển thị danh sách sản phẩm
$products = [
['name' => 'Bình sừởi', 'price' => 500000],
['name' => 'Nói bừu', 'price' => 1500000],
];
$xtpl->assign('products', $products);
Trong products.tpl
<table>
<tr><th>Tên</th><th>Giá</th></tr>
{foreach $products as $product}
<tr>
<td>{$product.name}</td>
<td>{$product.price|number_format:0:',':'.'} đ</td>
</tr>
{/foreach}
</table>
Tổng kết
Smarty trong NukeViet là một công cụ mạnh mẽ để tách biệt giao diện và logic, dễ bảo trì, phù hợp xu hướng lập trình hiện đại. Giáo trình này là khởi điểm để bạn xây dựng hệ thống web mạnh mẽ, chuyên nghiệp.
0 Comments