Bỏ qua để đến nội dung

Tạo khuôn Smarty trong XOOPS

XOOPS sử dụng công cụ mẫu Smarty để tách bản trình bày khỏi logic. Hướng dẫn này bao gồm cú pháp Smarty, các tính năng dành riêng cho XOOPS và các phương pháp hay nhất về mẫu.

{* Scalar variables *}
<{$variable}>
<{$article.title}>
<{$user->getUsername()}>
{* Array access *}
<{$items[0]}>
<{$config['setting']}>
{* Default values *}
<{$title|default:'Untitled'}>
{* Text transformations *}
<{$text|upper}>
<{$text|lower}>
<{$text|capitalize}>
<{$text|truncate:100:'...'}>
{* HTML handling *}
<{$content|strip_tags}>
<{$html|escape:'html'}>
<{$url|escape:'url'}>
{* Date formatting *}
<{$timestamp|date_format:'%Y-%m-%d'}>
<{$date|date_format:$xoops_config.dateformat}>
{* Chaining modifiers *}
<{$text|strip_tags|truncate:50|escape}>
{* If/else *}
<{if $logged_in}>
Welcome, <{$username}>!
<{elseif $is_guest}>
Please log in.
<{else}>
Unknown state.
<{/if}>
{* Comparisons *}
<{if $count > 0}>
<{if $status == 'published'}>
<{if $items|@count >= 5}>
{* Logical operators *}
<{if $is_admin && $can_edit}>
<{if $type == 'news' || $type == 'article'}>
<{if !$is_hidden}>
{* Foreach with items *}
<{foreach item=article from=$articles}>
<h2><{$article.title}></h2>
<{/foreach}>
{* With key *}
<{foreach key=id item=value from=$items}>
<{$id}>: <{$value}>
<{/foreach}>
{* With iteration info *}
<{foreach item=item from=$items name=itemloop}>
<{$smarty.foreach.itemloop.index}>
<{$smarty.foreach.itemloop.iteration}>
<{$smarty.foreach.itemloop.first}>
<{$smarty.foreach.itemloop.last}>
<{/foreach}>
{* Foreachelse for empty arrays *}
<{foreach item=item from=$items}>
<{$item.name}>
<{foreachelse}>
No items found.
<{/foreach}>
<{section name=i loop=$items}>
<{$items[i].title}>
<{/section}>
{* Site info *}
<{$xoops_sitename}>
<{$xoops_url}>
<{$xoops_rootpath}>
<{$xoops_theme}>
{* User info *}
<{$xoops_isuser}>
<{$xoops_isadmin}>
<{$xoops_userid}>
<{$xoops_uname}>
{* Module info *}
<{$xoops_dirname}>
<{$xoops_pagetitle}>
{* Meta *}
<{$xoops_meta_keywords}>
<{$xoops_meta_description}>
{* Include from theme *}
<{include file="theme:header.html"}>
{* Include from module *}
<{include file="db:modulename_partial.tpl"}>
{* Include with variables *}
<{include file="db:mymodule_item.tpl" item=$article}>
{* Include from file system *}
<{include file="$xoops_rootpath/modules/mymodule/templates/partial.tpl"}>
{* In theme.html *}
<{foreach item=block from=$xoops_lblocks}>
<div class="block">
<{if $block.title}>
<h3><{$block.title}></h3>
<{/if}>
<{$block.content}>
</div>
<{/foreach}>
{* XoopsForm rendering *}
<{$form.javascript}>
<form action="<{$form.action}>" method="<{$form.method}>">
<{foreach item=element from=$form.elements}>
<div class="form-group">
<label><{$element.caption}></label>
<{$element.body}>
<{if $element.description}>
<small><{$element.description}></small>
<{/if}>
</div>
<{/foreach}>
</form>
{* XoopsFormLoader *}
<{xoFormLoader form=$form}>
{* Breadcrumb *}
<{xoBreadcrumb}>
{* Module menu *}
<{xoModuleMenu}>
include/smarty_plugins/function.myfunction.php
function smarty_function_myfunction($params, $smarty)
{
$name = $params['name'] ?? 'World';
return "Hello, {$name}!";
}
<{myfunction name="XOOPS"}>
templates/
├── admin/
│ ├── index.tpl
│ ├── item_list.tpl
│ └── item_form.tpl
├── blocks/
│ ├── recent.tpl
│ └── popular.tpl
├── frontend/
│ ├── index.tpl
│ ├── item_view.tpl
│ └── item_list.tpl
└── partials/
├── _header.tpl
├── _footer.tpl
└── _pagination.tpl
{* partials/_pagination.tpl *}
<nav class="pagination">
<{if $page > 1}>
<a href="<{$base_url}>&page=<{$page-1}>">Previous</a>
<{/if}>
<span>Page <{$page}> of <{$total_pages}></span>
<{if $page < $total_pages}>
<a href="<{$base_url}>&page=<{$page+1}>">Next</a>
<{/if}>
</nav>
{* Usage *}
<{include file="db:mymodule_pagination.tpl" page=$current_page total_pages=$pages base_url=$url}>
// In PHP
$xoopsTpl->caching = 1;
$xoopsTpl->cache_lifetime = 3600; // 1 hour
// Check if cached
if (!$xoopsTpl->is_cached('mymodule_index.tpl')) {
// Fetch data only if not cached
$items = $handler->getObjects();
$xoopsTpl->assign('items', $items);
}
// Clear specific template
$xoopsTpl->clear_cache('mymodule_index.tpl');
// Clear all module templates
$xoopsTpl->clear_all_cache();
  1. Escape Output - Luôn thoát nội dung do người dùng tạo
  2. Sử dụng Công cụ sửa đổi - Áp dụng các phép biến đổi thích hợp
  3. Giữ logic tối thiểu - Logic phức tạp thuộc về PHP
  4. Sử dụng các phần - Tái sử dụng các đoạn mẫu phổ biến
  5. Semantic HTML - Sử dụng các phần tử HTML5 thích hợp
  6. Khả năng truy cập - Bao gồm các thuộc tính ARIA khi cần thiết
  • Phát triển chủ đề - Tạo chủ đề
  • ../../04-API-Reference/Template/Template-System - XOOPS mẫu API
  • ../../03-Module-Development/Block-Development - Khối templates
  • ../Forms/Form-Elements - Hiển thị biểu mẫu