Kohana (PHP フレームワーク) では、レイアウト ビューとして機能する $template というメンバー変数を継続する Template_Controller を介してレイアウトが実装されます。次に、アクション メソッドで $template に追加のサブビュー (通常はコンテンツ ビュー) を設定できます。( http://forum.kohanaframework.org/discussion/3612/kohana-layout-system/p1 )
これにより、ランタイムでレイアウトの「テーマ」を変更できます。テナントが独自のテーマ (2 列、3 列など) を選択できるマルチテナント システムに役立ちます。
Scalaテンプレートエンジンを使用して、playframework 2 Scalaでそれを達成するにはどうすればよいですか? つまり、テナントが選択できる複数のレイアウト テンプレートが必要です。次に、コントローラーは、レイアウト テンプレートとアクション固有のコンテンツ テンプレートをレンダリングします。
(コントローラーのアクションの疑似コード) のようなもの:
- ユーザーに基づいて、レイアウト テーマ (データベース内の文字列に格納された名前で、対応するマッピング ビュー ファイルがあります) を取得します。
- アクション固有のコンテンツ ビューをレンダリングします。
- (1)で取得したレイアウトビューを(2)とともにレンダリングします。
注: アクションごとに、レイアウト テーマはユーザーごとに変更される場合がありますが、コンテンツ ビューは同じままです。
そのドキュメント ( http://www.playframework.com/documentation/2.1.1/ScalaTemplateUseCases )
では、コンテンツ テンプレート、たとえば index.scala.html に、main.scala.html で定義されているメインへの呼び出しが含まれています。 、レイアウト テンプレート。つまり、ハードコーディングされているため、index.scala.html は main.scala.html と密接に結合されています。
リフレクションを使用してコントローラーからメインを呼び出し、コンテンツを渡すことについて考えました。
別の方法は、Scalate などの解釈されたテンプレート エンジンを使用することです。
なにか提案を?