Tham khảo Smarty API
Hoàn thành tài liệu API cho việc tạo khuôn mẫu Smarty trong XOOPS.
Kiến trúc công cụ mẫu
Phần tiêu đề “Kiến trúc công cụ mẫu”graph TB subgraph "Template Processing" A[Controller] --> B[Assign Variables] B --> C[XoopsTpl] C --> D[Smarty Engine] D --> E{Template Cached?} E -->|Yes| F[Load from Cache] E -->|No| G[Compile Template] G --> H[Execute PHP] F --> H H --> I[HTML Output] end
subgraph "Template Sources" J[File System] --> D K[Database] --> D L[String] --> D end
subgraph "Plugin Types" M[Functions] --> D N[Modifiers] --> D O[Block Functions] --> D P[Compiler Functions] --> D endLớp XoopsTpl
Phần tiêu đề “Lớp XoopsTpl”Khởi tạo
Phần tiêu đề “Khởi tạo”// Global template objectglobal $xoopsTpl;
// Or get new instance$tpl = new XoopsTpl();
// Available in modules$GLOBALS['xoopsTpl']->assign('myvar', $value);Phương pháp cốt lõi
Phần tiêu đề “Phương pháp cốt lõi”| Phương pháp | Thông số | Mô tả |
|---|---|---|
assign | string $name, mixed $value | Gán biến cho mẫu |
assignByRef | string $name, mixed &$value | Chỉ định bằng cách tham khảo |
append | string $name, mixed $value, bool $merge = false | Nối vào biến mảng |
display | string $template | Mẫu kết xuất và đầu ra |
fetch | string $template | Kết xuất và trả lại mẫu |
clearAssign | string $name | Xóa biến được gán |
clearAllAssign | - | Xóa tất cả các biến |
getTemplateVars | string $name = null | Nhận các biến được gán |
templateExists | string $template | Kiểm tra xem mẫu có tồn tại không |
isCached | string $template | Kiểm tra xem mẫu có được lưu vào bộ nhớ đệm không |
clearCache | string $template = null | Xóa bộ nhớ đệm mẫu |
Phép gán biến
Phần tiêu đề “Phép gán biến”// Simple assignment$xoopsTpl->assign('title', 'My Page Title');$xoopsTpl->assign('count', 42);$xoopsTpl->assign('is_admin', true);
// Array assignment$xoopsTpl->assign('items', [ ['id' => 1, 'name' => 'Item 1'], ['id' => 2, 'name' => 'Item 2'],]);
// Object assignment$xoopsTpl->assign('user', $xoopsUser);
// Multiple assignments$xoopsTpl->assign([ 'title' => 'My Title', 'content' => 'My Content', 'author' => 'John Doe']);
// Append to array$xoopsTpl->append('items', ['id' => 3, 'name' => 'Item 3']);Đang tải mẫu
Phần tiêu đề “Đang tải mẫu”// From database (compiled)$xoopsTpl->display('db:mymodule_index.tpl');
// From file system$xoopsTpl->display('file:' . XOOPS_ROOT_PATH . '/modules/mymodule/templates/custom.tpl');
// Fetch without output$html = $xoopsTpl->fetch('db:mymodule_item.tpl');
// From string$template = '<h1>{$title}</h1><p>{$content}</p>';$html = $xoopsTpl->fetch('string:' . $template);Smarty Tham khảo cú pháp
Phần tiêu đề “Smarty Tham khảo cú pháp”{* Simple variable *}<{$title}>
{* Array access *}<{$item.name}><{$item['name']}>
{* Object property *}<{$user->name}><{$user->getVar('uname')}>
{* Config variable *}<{$xoops_sitename}>
{* Constant *}<{$smarty.const._MD_MYMODULE_TITLE}>
{* Server variables *}<{$smarty.server.REQUEST_URI}><{$smarty.get.id}><{$smarty.post.name}>Công cụ sửa đổi
Phần tiêu đề “Công cụ sửa đổi”{* String modifiers *}<{$title|upper}><{$title|lower}><{$title|capitalize}><{$title|truncate:50:"..."}><{$content|strip_tags}><{$content|nl2br}><{$text|escape:'html'}><{$text|escape:'url'}>
{* Date formatting *}<{$timestamp|date_format:"%Y-%m-%d"}><{$timestamp|date_format:"%B %e, %Y"}>
{* Number formatting *}<{$price|number_format:2:".":","}>
{* Default value *}<{$optional|default:"N/A"}>
{* Chained modifiers *}<{$title|strip_tags|truncate:50|escape}>
{* Count array *}<{$items|@count}>Cấu trúc điều khiển
Phần tiêu đề “Cấu trúc điều khiển”{* If/else *}<{if $is_admin}> <p>Admin content</p><{elseif $is_moderator}> <p>Moderator content</p><{else}> <p>User content</p><{/if}>
{* Foreach loop *}<{foreach from=$items item=item key=key}> <li><{$key}>: <{$item.name}></li><{/foreach}>
{* Foreach with properties *}<{foreach from=$items item=item name=itemLoop}> <{if $smarty.foreach.itemLoop.first}> <ul> <{/if}>
<li class="<{if $smarty.foreach.itemLoop.iteration is odd}>odd<{else}>even<{/if}>"> <{$smarty.foreach.itemLoop.iteration}>. <{$item.name}> </li>
<{if $smarty.foreach.itemLoop.last}> </ul> <p>Total: <{$smarty.foreach.itemLoop.total}></p> <{/if}><{/foreach}>
{* For loop *}<{for $i=1 to 10}> <{$i}><{/for}>
{* While loop *}<{while $count < 10}> <{$count}> <{$count = $count + 1}><{/while}>Bao gồm
Phần tiêu đề “Bao gồm”{* Include another template *}<{include file="db:mymodule_header.tpl"}>
{* Include with variables *}<{include file="db:mymodule_item.tpl" item=$currentItem showAuthor=true}>
{* Include from theme *}<{include file="$theme_template_set/header.tpl"}>Bình luận
Phần tiêu đề “Bình luận”{* This is a Smarty comment - not rendered in output *}
{* Multi-line comment explaining the template*}XOOPS-Chức năng cụ thể
Phần tiêu đề “XOOPS-Chức năng cụ thể”Hiển thị khối
Phần tiêu đề “Hiển thị khối”{* Render block by ID *}<{xoBlock id=5}>
{* Render block by name *}<{xoBlock name="mymodule_recent"}>
{* Render all blocks in position *}<{foreach item=block from=$xoBlocks.canvas_left}> <div class="block"> <h3><{$block.title}></h3> <{$block.content}> </div><{/foreach}>Xử lý hình ảnh và nội dung
Phần tiêu đề “Xử lý hình ảnh và nội dung”{* Module image *}<img src="<{$xoops_url}>/modules/<{$xoops_dirname}>/assets/images/logo.png">
{* Theme image *}<img src="<{$xoops_imageurl}>icon.png">
{* Upload directory *}<img src="<{$xoops_upload_url}>/<{$item.image}>">Thế hệ URL
Phần tiêu đề “Thế hệ URL”{* Module URL *}<a href="<{$xoops_url}>/modules/<{$xoops_dirname}>/item.php?id=<{$item.id}>"> <{$item.title}></a>
{* With SEO-friendly URL (if enabled) *}<a href="<{$item.url}>"><{$item.title}></a>Luồng biên dịch mẫu
Phần tiêu đề “Luồng biên dịch mẫu”sequenceDiagram participant Request participant XoopsTpl participant Smarty participant Cache participant FileSystem
Request->>XoopsTpl: display('db:template.tpl') XoopsTpl->>Smarty: Process template
Smarty->>Cache: Check compiled cache
alt Cache Hit Cache-->>Smarty: Return compiled PHP else Cache Miss Smarty->>FileSystem: Load template source FileSystem-->>Smarty: Template content Smarty->>Smarty: Compile to PHP Smarty->>Cache: Store compiled PHP end
Smarty->>Smarty: Execute compiled PHP Smarty-->>XoopsTpl: HTML output XoopsTpl-->>Request: Rendered HTMLPlugin Smarty tùy chỉnh
Phần tiêu đề “Plugin Smarty tùy chỉnh”Plugin chức năng
Phần tiêu đề “Plugin chức năng”function smarty_function_myfunction($params, $smarty){ $name = $params['name'] ?? 'World'; return "Hello, {$name}!";}
// Usage in template:// <{myfunction name="John"}>Plugin sửa đổi
Phần tiêu đề “Plugin sửa đổi”function smarty_modifier_timeago($timestamp){ $diff = time() - $timestamp;
if ($diff < 60) { return 'just now'; } elseif ($diff < 3600) { $mins = floor($diff / 60); return "{$mins} minute(s) ago"; } elseif ($diff < 86400) { $hours = floor($diff / 3600); return "{$hours} hour(s) ago"; } else { $days = floor($diff / 86400); return "{$days} day(s) ago"; }}
// Usage in template:// <{$item.created|timeago}>Chặn plugin
Phần tiêu đề “Chặn plugin”function smarty_block_cache($params, $content, $smarty, &$repeat){ if ($repeat) { // Opening tag return ''; } else { // Closing tag - process content $ttl = $params['ttl'] ?? 3600; $key = md5($content);
// Check cache... return $content; }}
// Usage in template:// <{cache ttl=3600}>// Expensive content here// <{/cache}>Mẹo về hiệu suất
Phần tiêu đề “Mẹo về hiệu suất”graph LR subgraph "Optimization Strategies" A[Enable Caching] --> E[Faster Response] B[Minimize Variables] --> E C[Avoid Complex Logic] --> E D[Pre-compute in PHP] --> E endCác phương pháp hay nhất
Phần tiêu đề “Các phương pháp hay nhất”- Bật bộ nhớ đệm mẫu trong quá trình sản xuất
- Chỉ gán các biến cần thiết - không truyền toàn bộ đối tượng
- Sử dụng ít công cụ sửa đổi - định dạng trước trong PHP khi có thể
- Tránh vòng lặp lồng nhau - cơ cấu lại dữ liệu trong PHP
- Cache các khối đắt tiền - sử dụng bộ nhớ đệm khối cho các truy vấn phức tạp
Tài liệu liên quan
Phần tiêu đề “Tài liệu liên quan”- Thông tin cơ bản về Smarty
- Phát triển chủ đề
- Di chuyển Smarty 4
#xoops #api #thông minh #templates #reference