コンテンツにスキップ

ADR-003 - テンプレート エンジン

ADR-003: テンプレート エンジン (Smarty)

Section titled “ADR-003: テンプレート エンジン (Smarty)”

XOOPSのSmartyテンプレート エンジン採用のアーキテクチャ決定記録


承認 - XOOPS 2.0以来のコア決定

進化中 - XOOPS 4.0向けSmarty 4/5への移行計画


XOOPSはテンプレート化ソリューションが必要でした:

  1. プレゼンテーションをビジネス ロジックから分離
  2. テーマ設計者がPHP知識なしで作業
  3. テンプレート継承とインクルードをサポート
  4. パフォーマンスのためのキャッシング
  5. ユーザー カスタマイズ可能なテンプレート
  6. 国際化をサポート

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 --> K

Smartyをテンプレート エンジンとして使用します。理由:

// 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}>

XOOPSは標準ではなく<{}>を使用:

{* 標準Smarty *}
{$variable}
{* XOOPS Smarty - JavaScriptコンフリクトを回避 *}
<{$variable}>
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

  1. デザイナー フレンドリー: HTMLのような構文
  2. キャッシング: ビルトイン テンプレート キャッシング
  3. セキュリティ: PHPコード分離
  4. 柔軟性: モディファイアー、関数、プラグイン
  5. カスタマイズ: ユーザーがテンプレートを変更可能
  6. コミュニティ: 大型Smartyエコシステム
  1. 学習曲線: Smarty固有の構文
  2. オーバーヘッド: コンパイル ステップが必要
  3. デバッギング: テンプレート エラーが不明確の場合がある
  4. バージョン問題: バージョン間の破壊的な変更

  • ADR-001: モジュール式アーキテクチャ
  • ADR-002: データベース抽象化


#xoops #architecture #adr #smarty #templates #design-decision