ADR-003 - Enjin Templat
ADR-003: Enjin Templat (Smarty)> Rekod Keputusan Seni Bina untuk penggunaan enjin templat Smarty XOOPS.---
Section titled “ADR-003: Enjin Templat (Smarty)> Rekod Keputusan Seni Bina untuk penggunaan enjin templat Smarty XOOPS.---”StatusDiterima - Keputusan teras sejak XOOPS 2.0Berkembang - Penghijrahan ke Smarty 4/5 dirancang untuk XOOPS 4.0---
Section titled “StatusDiterima - Keputusan teras sejak XOOPS 2.0Berkembang - Penghijrahan ke Smarty 4/5 dirancang untuk XOOPS 4.0---”KonteksXOOPS memerlukan penyelesaian templat yang akan:1. Asingkan pembentangan daripada logik perniagaan
Section titled “KonteksXOOPS memerlukan penyelesaian templat yang akan:1. Asingkan pembentangan daripada logik perniagaan”- Benarkan pereka tema bekerja tanpa pengetahuan PHP
- Sokongan templat warisan dan termasuk
- Sediakan caching untuk prestasi
- Dayakan templat yang boleh disesuaikan pengguna
- Menyokong pengantarabangsaan---
Gambarajah Keputusan
Section titled “Gambarajah Keputusan”mermaidflowchart TB subgraph "PHP Layer" A[Module Controller] B[Template Variables] end
subgraph "Smarty Engine" C[Smarty Core] D[Template Compiler] E[Cache Manager] end
subgraph "Templates" F[Module Templates] G[Theme Templates] H[Block Templates] end
subgraph "Output" I[Compiled PHP] J[Cached HTML] K[Final HTML] end
A --> B B --> C C --> D C --> E D --> F D --> G D --> H F --> I G --> I H --> I E --> J I --> K J --> KKeputusanKami akan menggunakan Smarty sebagai enjin templat kerana:### 1. Pemisahan Kebimbangan
Section titled “KeputusanKami akan menggunakan Smarty sebagai enjin templat kerana:### 1. Pemisahan Kebimbangan”php// PHP (Controller) - Business logic$items = $itemHandler->getPublishedItems();$xoopsTpl->assign('items', $items);
// Smarty (View) - Presentation// templates/items.tplSmarty{* Smarty template - No PHP logic *}<{foreach item=item from=$items}> <article> <h2><{$item.title}></h2> <p><{$item.summary}></p> </article><{/foreach}>2. XOOPS PembatasXOOPS menggunakan <{ and }> dan bukannya { standard }:
Section titled “2. XOOPS PembatasXOOPS menggunakan <{ and }> dan bukannya { standard }:”Smarty{* Standard Smarty *}{$variable}
{* XOOPS Smarty - Avoids JavaScript conflicts *}<{$variable}>3. Hierarki Templat
Section titled “3. Hierarki Templat”mermaidgraph TB A[Theme Master Template<br>theme.html] --> B[Module Template<br>module_index.tpl] A --> C[Block Templates<br>block_*.tpl] B --> D[Partial Templates<br>_header.tpl] B --> E[Partial Templates<br>_footer.tpl]
style A fill:#f9f,stroke:#333 style B fill:#9ff,stroke:#333 style C fill:#ff9,stroke:#3334. Storan Templat- Pangkalan Data: Templat tersuai disimpan untuk keupayaan kembali
Section titled “4. Storan Templat- Pangkalan Data: Templat tersuai disimpan untuk keupayaan kembali”- Sistem Fail: Templat asal dalam direktori modul
- Cache: Templat yang disusun untuk prestasi---
Konfigurasi Pintar
Section titled “Konfigurasi Pintar”php// XOOPS Smarty initialization$xoopsTpl = new XoopsTpl();
// Custom delimiters$xoopsTpl->left_delim = '<{';$xoopsTpl->right_delim = '}>';
// Caching$xoopsTpl->caching = XOOPS_TEMPLATE_CACHE;$xoopsTpl->cache_lifetime = 3600;
// Security$xoopsTpl->security_policy = new Smarty_Security($xoopsTpl);$xoopsTpl->security_policy->php_functions = [];$xoopsTpl->security_policy->php_modifiers = ['escape', 'count'];Ciri Templat Digunakan### Pembolehubah
Section titled “Ciri Templat Digunakan### Pembolehubah”Smarty{* Simple variable *}<{$title}>
{* Object property *}<{$item.title}>
{* With modifier *}<{$content|truncate:200:'...'}>
{* Escaped output *}<{$userInput|escape:'html'}>Struktur Kawalan
Section titled “Struktur Kawalan”Smarty{* Conditional *}<{if $isAdmin}> <a href="admin.php">Admin</a><{elseif $isUser}> <a href="profile.php">Profile</a><{else}> <a href="login.php">Login</a><{/if}>
{* Loop *}<{foreach item=item from=$items name=itemloop}> <{$Smarty.foreach.itemloop.index}>: <{$item.title}><{/foreach}>Termasuk
Section titled “Termasuk”Smarty{* Include another template *}<{include file="db:mymodule_header.tpl"}>
{* Include with variables *}<{include file="db:mymodule_item.tpl" item=$currentItem}>
{* Include from theme *}<{include file="file:$theme_path/partials/sidebar.tpl"}>Akibat### Positif1. Mesra pereka: sintaks seperti HTML
Section titled “Akibat### Positif1. Mesra pereka: sintaks seperti HTML”- Caching: Caching templat terbina dalam
- Keselamatan: Pengasingan kod PHP
- Fleksibiliti: Pengubah suai, fungsi, pemalam
- Penyesuaian: Pengguna boleh mengubah suai templat
- Komuniti: Ekosistem Smarty Besar### Negatif1. Keluk pembelajaran: Sintaks khusus Smarty
- Overhead: Langkah penyusunan diperlukan
- Nyahpepijat: Ralat templat boleh menjadi samar
- Isu versi: Memecahkan perubahan antara versi### Tebatan- Pembelajaran: Dokumentasi yang komprehensif
- Prestasi: Caching agresif
- Nyahpepijat: Konsol nyahpepijat, kosongkan mesej ralat
- Versi: Lapisan keserasian dalam XOOPS---
Sejarah Versi
Section titled “Sejarah Versi”mermaidtimeline title Smarty in XOOPS 2003 : Smarty 2.x : Initial integration 2013 : Smarty 3.0 : XOOPS 2.5.5 2020 : Smarty 3.1 : XOOPS 2.5.10 2026 : Smarty 4/5 : XOOPS 4.0Migrasi: Smarty 3 ke 4/5### Memecahkan Perubahan
Section titled “Migrasi: Smarty 3 ke 4/5### Memecahkan Perubahan”Smarty{* Smarty 3 - Deprecated *}<{php}>echo date('Y');<{/php}>
{* Smarty 4+ - Use modifiers or assign from PHP *}<{$current_year}>
{* Smarty 3 - {section} deprecated *}<{section name=i loop=$items}> <{$items[i].title}><{/section}>
{* Smarty 4+ - Use {foreach} *}<{foreach $items as $item}> <{$item.title}><{/foreach}>Lapisan KeserasianXOOPS menyediakan lapisan keserasian untuk peralihan yang lancar:
Section titled “Lapisan KeserasianXOOPS menyediakan lapisan keserasian untuk peralihan yang lancar:”php// XoopsTpl extends Smarty with compatibility methodsclass XoopsTpl extends Smarty{ public function assign($tpl_var, $value = null) { // Handles both Smarty 3 and 4 syntax return parent::assign($tpl_var, $value); }}Alternatif Dipertimbangkan### 1. Ranting
Section titled “Alternatif Dipertimbangkan### 1. Ranting”Kebaikan: Moden, ekosistem Symfony Kontra: Sintaks yang berbeza, usaha migrasi Keputusan: Pilihan masa depan yang mungkin untuk XOOPS 3.x### 2. Bilah (Laravel) Kebaikan: Sintaks bersih, popular Keburukan: Khusus Laravel Keputusan: Tidak sesuai untuk kegunaan sendiri### 3. Templat PHP Asli Kebaikan: Tiada keluk pembelajaran, pantas Keburukan: Risiko keselamatan, tiada pemisahan Keputusan: Ditolak kerana kebolehselenggaraan---
Keputusan Berkaitan- ADR-001: Seni Bina Modular
Section titled “Keputusan Berkaitan- ADR-001: Seni Bina Modular”- ADR-002: Abstraksi Pangkalan Data---
Rujukan- Dokumentasi Smarty: https://www.Smarty.net/docs/en/
Section titled “Rujukan- Dokumentasi Smarty: https://www.Smarty.net/docs/en/”- Panduan Sistem Templat XOOPS
- Corak MVC dalam Aplikasi Web---
#XOOPS #architecture #adr #Smarty #templates #design-decision