ADR-003 - Sablonmotor
ADR-003: Sablonmotor (Smarty)
Szekció neve “ADR-003: Sablonmotor (Smarty)”Architektúra Döntési rekord a XOOPS Smarty sablonmotor elfogadásához.
Állapot
Szekció neve “Állapot”Elfogadva – Alapvető döntés a XOOPS 2.0 óta
Fejlődik – A Smarty 4/5-ra való átállás a XOOPS 4.0-ra tervezett
Kontextus
Szekció neve “Kontextus”A XOOPS-nak olyan sablonmegoldásra volt szüksége, amely:
- Külön prezentáció az üzleti logikától
- Engedélyezze a tématervezőknek, hogy PHP ismerete nélkül dolgozzanak
- Támogassa a sablon öröklését és tartalmazza
- Gyorsítótárazás biztosítása a teljesítmény érdekében
- Engedélyezze a felhasználó által testreszabható sablonokat
- A nemzetköziesedés támogatása
Döntési diagram
Szekció neve “Döntési diagram”flowchart 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 --> KDöntés
Szekció neve “Döntés”A Smarty-t fogjuk használni sablonmotorként, mert:
1. A gondok szétválasztása
Szekció neve “1. A gondok szétválasztása”// PHP (Controller) - Business logic$items = $itemHandler->getPublishedItems();$xoopsTpl->assign('items', $items);
// Smarty (View) - Presentation// templates/items.tpl{* Smarty template - No PHP logic *}<{foreach item=item from=$items}> <article> <h2><{$item.title}></h2> <p><{$item.summary}></p> </article><{/foreach}>2. XOOPS Határolók
Szekció neve “2. XOOPS Határolók”A XOOPS a <{ and }>-t használja a szabványos { } helyett:
{* Standard Smarty *}{$variable}
{* XOOPS Smarty - Avoids JavaScript conflicts *}<{$variable}>3. Sablonhierarchia
Szekció neve “3. Sablonhierarchia”graph 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. Sablon tárolása
Szekció neve “4. Sablon tárolása”- Adatbázis: Testreszabott sablonok tárolva a visszaállításhoz
- Fájlrendszer: Eredeti sablonok a modulkönyvtárakban
- Gyorsítótár: Összeállított sablonok a teljesítmény érdekében
Intelligens konfiguráció
Szekció neve “Intelligens konfiguráció”// 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'];Használt sablon funkciók
Szekció neve “Használt sablon funkciók”Változók
Szekció neve “Változók”{* Simple variable *}<{$title}>
{* Object property *}<{$item.title}>
{* With modifier *}<{$content|truncate:200:'...'}>
{* Escaped output *}<{$userInput|escape:'html'}>Vezérlési struktúrák
Szekció neve “Vezérlési struktúrák”{* 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}>Tartalmazza
Szekció neve “Tartalmazza”{* 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"}>Következmények
Szekció neve “Következmények”Pozitív
Szekció neve “Pozitív”- Tervezőbarát: HTML-szerű szintaxis
- Gyorsítótár: Beépített sablon gyorsítótár
- Biztonság: PHP kód elkülönítése
- Rugalmasság: Módosítók, funkciók, bővítmények
- Testreszabás: A felhasználók módosíthatják a sablonokat
- Közösség: Nagy Smarty ökoszisztéma
Negatív
Szekció neve “Negatív”- Tanulási görbe: Smarty-specifikus szintaxis
- Rezsi: Fordítási lépés szükséges
- Hibakeresés: A sablonhibák rejtélyesek lehetnek
- Verzióval kapcsolatos problémák: A verziók közötti változások megszakítása
Enyhítések
Szekció neve “Enyhítések”- Tanulás: Átfogó dokumentáció
- Teljesítmény: Agresszív gyorsítótár
- Hibakeresés: Hibakeresési konzol, hibaüzenetek törlése
- Verziók: Kompatibilitási réteg a XOOPS-ban
Verzióelőzmények
Szekció neve “Verzióelőzmények”timeline 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.0Migráció: Smarty 3 4/5-ra
Szekció neve “Migráció: Smarty 3 4/5-ra”Megtörő változások
Szekció neve “Megtörő változások”{* 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}>Kompatibilitási réteg
Szekció neve “Kompatibilitási réteg”A XOOPS kompatibilitási réteget biztosít a sima átmenetekhez:
// 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); }}Megfontolt alternatívák
Szekció neve “Megfontolt alternatívák”1. Gally
Szekció neve “1. Gally”Előnyök: Modern, Symfony ökoszisztéma Hátrányok: eltérő szintaxis, migrációs erőfeszítés Döntés: Lehetséges jövőbeli opció a XOOPS 3.x számára
2. Penge (Laravel)
Szekció neve “2. Penge (Laravel)”Előnyök: tiszta szintaxis, népszerű Hátrányok: Laravel-specifikus Döntés: Nem alkalmas önálló használatra
3. Natív PHP sablonok
Szekció neve “3. Natív PHP sablonok”Előnyök: Nincs tanulási görbe, gyors Hátrányok: Biztonsági kockázatok, nincs szétválasztás Határozat: Karbantarthatóság miatt elutasítva
Kapcsolódó határozatok
Szekció neve “Kapcsolódó határozatok”- ADR-001: moduláris felépítés
- ADR-002: Adatbázis-absztrakció
Referenciák
Szekció neve “Referenciák”- Okos dokumentáció: https://www.smarty.net/docs/en/
- XOOPS sablonrendszer útmutató
- MVC minta a webalkalmazásokban
#xoops #architecture #adr #okos #sablonok #design-döntés