ADR-003 - テンプレート エンジン
ADR-003: テンプレート エンジン (Smarty)
Section titled “ADR-003: テンプレート エンジン (Smarty)”XOOPSのSmartyテンプレート エンジン採用のアーキテクチャ決定記録
承認 - XOOPS 2.0以来のコア決定
進化中 - XOOPS 4.0向けSmarty 4/5への移行計画
コンテクスト
Section titled “コンテクスト”XOOPSはテンプレート化ソリューションが必要でした:
- プレゼンテーションをビジネス ロジックから分離
- テーマ設計者がPHP知識なしで作業
- テンプレート継承とインクルードをサポート
- パフォーマンスのためのキャッシング
- ユーザー カスタマイズ可能なテンプレート
- 国際化をサポート
flowchart TB subgraph "PHPレイヤー" A[モジュール コントローラー] B[テンプレート 変数] end
subgraph "Smartyエンジン" C[Smarty コア] D[テンプレート コンパイラー] E[キャッシュ マネージャー] end
subgraph "テンプレート" F[モジュール テンプレート] G[テーマ テンプレート] H[ブロック テンプレート] end
subgraph "出力" I[コンパイル済みPHP] J[キャッシュ済みHTML] K[最終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 --> KSmartyをテンプレート エンジンとして使用します。理由:
1. 関心の分離
Section titled “1. 関心の分離”// PHP (コントローラー) - ビジネス ロジック$items = $itemHandler->getPublishedItems();$xoopsTpl->assign('items', $items);
// Smarty (ビュー) - プレゼンテーション// templates/items.tpl{* Smartyテンプレート - PHPロジックなし *}<{foreach item=item from=$items}> <article> <h2><{$item.title}></h2> <p><{$item.summary}></p> </article><{/foreach}>2. XOOPSデリミター
Section titled “2. XOOPSデリミター”XOOPSは標準ではなく<{と}>を使用:
{* 標準Smarty *}{$variable}
{* XOOPS Smarty - JavaScriptコンフリクトを回避 *}<{$variable}>3. テンプレート 階層
Section titled “3. テンプレート 階層”graph TB A[テーマ マスター テンプレート<br>theme.html] --> B[モジュール テンプレート<br>module_index.tpl] A --> C[ブロック テンプレート<br>block_*.tpl] B --> D[部分 テンプレート<br>_header.tpl] B --> E[部分 テンプレート<br>_footer.tpl]
style A fill:#f9f,stroke:#333 style B fill:#9ff,stroke:#333 style C fill:#ff9,stroke:#333- デザイナー フレンドリー: HTMLのような構文
- キャッシング: ビルトイン テンプレート キャッシング
- セキュリティ: PHPコード分離
- 柔軟性: モディファイアー、関数、プラグイン
- カスタマイズ: ユーザーがテンプレートを変更可能
- コミュニティ: 大型Smartyエコシステム
- 学習曲線: Smarty固有の構文
- オーバーヘッド: コンパイル ステップが必要
- デバッギング: テンプレート エラーが不明確の場合がある
- バージョン問題: バージョン間の破壊的な変更
関連する決定
Section titled “関連する決定”- ADR-001: モジュール式アーキテクチャ
- ADR-002: データベース抽象化
- Smarty文書: https://www.smarty.net/docs/en/
- XOOPSテンプレート システム ガイド
- ウェブ アプリケーションのMVCパターン
#xoops #architecture #adr #smarty #templates #design-decision