قوالب Smarty في XOOPS
نظرة عامة
Section titled “نظرة عامة”يستخدم XOOPS محرك قوالب Smarty لفصل العرض عن المنطق. يغطي هذا الدليل بناء جملة Smarty والميزات الخاصة بـ XOOPS وأفضل ممارسات القوالب.
البناء الأساسي
Section titled “البناء الأساسي”المتغيرات
Section titled “المتغيرات”{* متغيرات عددية *}<{$variable}><{$article.title}><{$user->getUsername()}>
{* الوصول إلى المصفوفة *}<{$items[0]}><{$config['setting']}>
{* Default values *}<{$title|default:'Untitled'}>Modifiers
Section titled “Modifiers”{* 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}>Conditionals
Section titled “Conditionals”{* 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}>Sections (Legacy)
Section titled “Sections (Legacy)”<{section name=i loop=$items}> <{$items[i].title}><{/section}>XOOPS-Specific Features
Section titled “XOOPS-Specific Features”Global Variables
Section titled “Global Variables”{* 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}>Including Files
Section titled “Including Files”{* 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"}>Block Display
Section titled “Block Display”{* In theme.html *}<{foreach item=block from=$xoops_lblocks}> <div class="block"> <{if $block.title}> <h3><{$block.title}></h3> <{/if}> <{$block.content}> </div><{/foreach}>Form Integration
Section titled “Form Integration”{* 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>Custom Functions
Section titled “Custom Functions”Registered by XOOPS
Section titled “Registered by XOOPS”{* XoopsFormLoader *}<{xoFormLoader form=$form}>
{* Breadcrumb *}<{xoBreadcrumb}>
{* Module menu *}<{xoModuleMenu}>Custom Plugins
Section titled “Custom Plugins”function smarty_function_myfunction($params, $smarty){ $name = $params['name'] ?? 'World'; return "Hello, {$name}!";}<{myfunction name="XOOPS"}>Template Organization
Section titled “Template Organization”Recommended Structure
Section titled “Recommended Structure”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.tplPartial Templates
Section titled “Partial Templates”{* 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}>Performance
Section titled “Performance”Caching
Section titled “Caching”// In PHP$xoopsTpl->caching = 1;$xoopsTpl->cache_lifetime = 3600; // 1 hour
// Check if cachedif (!$xoopsTpl->is_cached('mymodule_index.tpl')) { // Fetch data only if not cached $items = $handler->getObjects(); $xoopsTpl->assign('items', $items);}Clear Cache
Section titled “Clear Cache”// Clear specific template$xoopsTpl->clear_cache('mymodule_index.tpl');
// Clear all module templates$xoopsTpl->clear_all_cache();Best Practices
Section titled “Best Practices”- Escape Output - Always escape user-generated content
- Use Modifiers - Apply appropriate transformations
- Keep Logic Minimal - Complex logic belongs in PHP
- Use Partials - Reuse common template fragments
- Semantic HTML - Use proper HTML5 elements
- Accessibility - Include ARIA attributes where needed
Related Documentation
Section titled “Related Documentation”- Theme-Development - Theme creation
- ../../04-API-Reference/Template/Template-System - XOOPS template API
- ../../03-Module-Development/Block-Development - Block templates
- ../Forms/Form-Elements - Form rendering