Lập trình Smarty trong NukeViet

 

Lập trình Smarty trong NukeViet

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ặc nv_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.

Post a Comment

0 Comments