Aller au contenu

Référence API modèles Smarty

Documentation API complète pour les modèles Smarty dans XOOPS.


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
end

// Global template object
global $xoopsTpl;
// Or get new instance
$tpl = new XoopsTpl();
// Available in modules
$GLOBALS['xoopsTpl']->assign('myvar', $value);
MéthodeParamètresDescription
assignstring $name, mixed $valueAssigner variable au modèle
assignByRefstring $name, mixed &$valueAssigner par référence
appendstring $name, mixed $value, bool $merge = falseAjouter à variable tableau
displaystring $templateAfficher et exporter modèle
fetchstring $templateAfficher et retourner modèle
clearAssignstring $nameEffacer variable assignée
clearAllAssign-Effacer toutes les variables
getTemplateVarsstring $name = nullObtenir variables assignées
templateExistsstring $templateVérifier si modèle existe
isCachedstring $templateVérifier si modèle en cache
clearCachestring $template = nullEffacer cache du modèle
// 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']);
// 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);

{* 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}>
{* 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}>
{* 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}>
{* 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"}>
{* This is a Smarty comment - not rendered in output *}
{*
Multi-line comment
explaining the template
*}

{* 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}>
{* 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}>">
{* 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>

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 HTML

plugins/function.myfunction.php
function smarty_function_myfunction($params, $smarty)
{
$name = $params['name'] ?? 'World';
return "Hello, {$name}!";
}
// Usage in template:
// <{myfunction name="John"}>
plugins/modifier.timeago.php
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}>
plugins/block.cache.php
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}>

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
end
  1. Activer la mise en cache de modèles en production
  2. Assigner uniquement les variables nécessaires - ne pas passer des objets entiers
  3. Utiliser les modificateurs avec parcimonie - pré-formater en PHP si possible
  4. Éviter les boucles imbriquées - restructurer les données en PHP
  5. Mettre en cache les blocs coûteux - utiliser la mise en cache des blocs pour les requêtes complexes

  • Bases de Smarty
  • Développement de thèmes
  • Migration Smarty 4

#xoops #api #smarty #templates #reference