ADR-003 - موتور قالب
ADR-003: موتور الگو (هوشمند)
Section titled “ADR-003: موتور الگو (هوشمند)”ثبت تصمیم در معماری برای استفاده XOOPS از موتور قالب Smarty.
پذیرفته - تصمیم اصلی از XOOPS 2.0
در حال تکامل - مهاجرت به Smarty 4/5 برای XOOPS 4.0 برنامه ریزی شده است
XOOPS به یک راه حل قالب نیاز داشت که:
- ارائه را از منطق تجاری جدا کنید
- به طراحان تم اجازه دهید بدون دانش PHP کار کنند
- پشتیبانی از وراثت قالب و شامل
- ذخیره کش برای عملکرد فراهم کنید
- قالب های قابل تنظیم توسط کاربر را فعال کنید
- حمایت از بین المللی
نمودار تصمیم گیری
Section titled “نمودار تصمیم گیری”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 --> Kما از Smarty به عنوان موتور الگو استفاده خواهیم کرد زیرا:
1. تفکیک نگرانی ها
Section titled “1. تفکیک نگرانی ها”// 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 Delimiters
Section titled “2. XOOPS Delimiters”XOOPS از <{ و }> به جای استاندارد { } استفاده می کند:
{* Standard Smarty *}{$variable}
{* XOOPS Smarty - Avoids JavaScript conflicts *}<{$variable}>3. سلسله مراتب الگو
Section titled “3. سلسله مراتب الگو”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. ذخیره سازی الگو
Section titled “4. ذخیره سازی الگو”- پایگاه داده: الگوهای سفارشی ذخیره شده برای قابلیت برگرداندن
- ** سیستم فایل **: قالب های اصلی در فهرست های ماژول
- ** Cache **: قالب های کامپایل شده برای عملکرد
پیکربندی هوشمند
Section titled “پیکربندی هوشمند”// 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'];از ویژگی های قالب استفاده شده است
Section titled “از ویژگی های قالب استفاده شده است”متغیرها
Section titled “متغیرها”{* Simple variable *}<{$title}>
{* Object property *}<{$item.title}>
{* With modifier *}<{$content|truncate:200:'...'}>
{* Escaped output *}<{$userInput|escape:'html'}>ساختارهای کنترلی
Section titled “ساختارهای کنترلی”{* 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}>{* 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"}>- طراح پسند: نحوی شبیه HTML
- Caching: ذخیره سازی قالب داخلی
- امنیت: جداسازی کد PHP
- **انعطاف **: اصلاح کننده ها، توابع، پلاگین ها
- ** سفارشی سازی **: کاربران می توانند قالب ها را تغییر دهند
- جامعه: اکوسیستم اسمارتی بزرگ
- ** منحنی یادگیری **: نحو خاص هوشمند
- **سربار **: مرحله تدوین مورد نیاز است
- اشکال زدایی: خطاهای الگو می توانند مرموز باشند
- **مشکلات نسخه **: شکستن تغییرات بین نسخه ها
- یادگیری: مستندات جامع
- عملکرد: ذخیره سازی تهاجمی
- اشکال زدایی: کنسول اشکال زدایی، پیام های خطا را پاک کنید
- نسخه: لایه سازگاری در XOOPS
تاریخچه نسخه
Section titled “تاریخچه نسخه”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.0مهاجرت: Smarty 3 به 4/5
Section titled “مهاجرت: Smarty 3 به 4/5”شکستن تغییرات
Section titled “شکستن تغییرات”{* 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}>لایه سازگاری
Section titled “لایه سازگاری”XOOPS یک لایه سازگاری برای انتقال صاف فراهم می کند:
// 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); }}جایگزین در نظر گرفته شده است
Section titled “جایگزین در نظر گرفته شده است”1. شاخه
Section titled “1. شاخه”مزایا: اکوسیستم مدرن، Symfony ** معایب **: نحو مختلف، تلاش مهاجرت تصمیم: گزینه احتمالی آینده برای XOOPS 3.x
2. بلید (لاراول)
Section titled “2. بلید (لاراول)”** مزایا **: نحو تمیز، محبوب ** معایب **: مخصوص لاراول تصمیم: برای استفاده مستقل مناسب نیست
3. قالب های بومی PHP
Section titled “3. قالب های بومی PHP”** مزایا **: بدون منحنی یادگیری، سریع ** معایب **: خطرات امنیتی، بدون جدایی تصمیم: به دلیل قابلیت نگهداری رد شد
تصمیمات مرتبط
Section titled “تصمیمات مرتبط”- ADR-001: معماری مدولار
- ADR-002: Database Abstraction
- مستندات هوشمند: https://www.smarty.net/docs/en/
- راهنمای سیستم قالب XOOPS
- الگوی MVC در برنامه های کاربردی وب
#xoops #معماری #adr #هوشمند #قالب #طراحی-تصمیم