ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 12 years ago

Closed 12 years ago

#2892 closed enhancement (fixed)

特定のモジュールの特定のテンプレートをプラグインなどから自由に拡張できるようにする

Reported by: ebihara Owned by: ebihara
Priority: major Milestone: OpenPNE3alpha2
Component: 指定しない Version:
Keywords: Cc:

Description (last modified by ebihara)

特定のモジュールの特定のテンプレートをプラグインなどから自由に拡張できるようにする

Change History (12)

comment:1 Changed 12 years ago by ebihara

Owner: changed from nobody to ebihara
Status: newassigned

テンプレートを拡張する機構については #2863 の対応に必要です(ログインアクションにおいて新規登録用アクションへのナビゲーションを変更する必要があるため)。

しばらくは #2863 と平行して取り組んでいきます。

comment:2 Changed 12 years ago by ebihara

以下のような形での実現を考えています。

  • パーツ(OpenPNE2 における simpleBox など)を、テンプレート部品としてヘルパーによって読み込むようにする
    • タイトルや本文などはヘルパーのパラメータとして渡す
    • 読み込むパーツは General, List など抽象的な名前によって指定される。具体的なパーツの見た目は、パラメータによって形を変えていく
      • simpleBox に 日付を与えると diaryDetailBox になるなど
    • パーツのテンプレート部品の各部分をパーシャルによって拡張できるようにする
      • アプリケーションのモジュール内もしくはプラグインのモジュールに内にある特定の命名規則のファイルをすべて自動で読み込む

comment:3 in reply to:  2 ; Changed 12 years ago by ebihara

Replying to ebihara:

  • パーツのテンプレート部品の各部分をパーシャルによって拡張できるようにする
    • アプリケーションのモジュール内もしくはプラグインのモジュールに内にある特定の命名規則のファイルをすべて自動で読み込む

ですが、コンポーネントスロットの利用も視野に入れて考えます。

comment:4 in reply to:  3 ; Changed 12 years ago by ebihara

Replying to ebihara:

Replying to ebihara:

  • パーツのテンプレート部品の各部分をパーシャルによって拡張できるようにする
    • アプリケーションのモジュール内もしくはプラグインのモジュールに内にある特定の命名規則のファイルをすべて自動で読み込む

ですが、コンポーネントスロットの利用も視野に入れて考えます。

おそらくコンポーネントスロットで実現可能です。プラグイン側から、特定モジュールの特定アクションの特定パーツの拡張領域に独自のテンプレート部品を組み込むことは可能でした。

問題はひとつのコンポーネントスロットに複数のテンプレート部品を埋め込むことができない点(sideMenu というコンポーネントスロット領域に対して複数の sideMenu コンポーネントスロットを埋め込むことはできず、最後に読み込まれたもので上書きされてしまう)で、これについては何かしらの手段で解決をする必要があります。

comment:5 in reply to:  4 Changed 12 years ago by ebihara

Replying to ebihara:

Replying to ebihara:

Replying to ebihara:

  • パーツのテンプレート部品の各部分をパーシャルによって拡張できるようにする
    • アプリケーションのモジュール内もしくはプラグインのモジュールに内にある特定の命名規則のファイルをすべて自動で読み込む

ですが、コンポーネントスロットの利用も視野に入れて考えます。

おそらくコンポーネントスロットで実現可能です。プラグイン側から、特定モジュールの特定アクションの特定パーツの拡張領域に独自のテンプレート部品を組み込むことは可能でした。

問題はひとつのコンポーネントスロットに複数のテンプレート部品を埋め込むことができない点(sideMenu というコンポーネントスロット領域に対して複数の sideMenu コンポーネントスロットを埋め込むことはできず、最後に読み込まれたもので上書きされてしまう)で、これについては何かしらの手段で解決をする必要があります。

  • アプリケーションのモジュール内もしくはプラグインのモジュールに内にある特定の命名規則のファイルをすべて自動で読み込む
  • ひとつのコンポーネントスロットに複数のテンプレート部品を埋め込む

以上の OpenPNE 独特のニーズから考えて、コンポーネントスロットの仕組みを更に拡張した OpenPNE 独自の仕組みを用意し、それを利用する方向で実現してみようと考えています。

comment:6 Changed 12 years ago by ebihara

あまりいい手が思い浮かばないので、ひとまずログイン画面は

  1. 実験的にログイン用のパーツを作成しコンポーネントスロットによる拡張が可能な形にする
  2. 1. で提示した仕組みを利用して認証プラグイン毎にログイン画面を拡張できるようにする

という形で実装しようと思います。

comment:7 Changed 12 years ago by ebihara

Description: modified (diff)

r7979 で実験的にログイン画面を拡張できるようにする機構を追加しました。

comment:8 Changed 12 years ago by ebihara

Description: modified (diff)
Priority: minormajor
Summary: 特定のモジュールの特定のテンプレートやアクションに対して、特定のモジュールから自由に拡張できるようにする特定のモジュールの特定のテンプレートに対してプラグインなどから自由に拡張できるようにする

このチケットの対応範囲を、「テンプレート・アクション」から「テンプレート」のみに限定します。

comment:9 Changed 12 years ago by ebihara

Description: modified (diff)
Summary: 特定のモジュールの特定のテンプレートに対してプラグインなどから自由に拡張できるようにする特定のモジュールの特定のテンプレートをプラグインなどから自由に拡張できるようにする

comment:10 Changed 12 years ago by ebihara

ロジック(アクション)の拡張についてはここでは考慮しないようにし、スロットの仕組みを利用していくことでスマートな実装になるように思えます。

  1. ひとつのスロットに複数のテンプレート部品を埋め込むことができるようなヘルパーを記述する
  2. パーツ側の拡張領域では、通常の include_slot() ではなく、 1. で作成したヘルパーを使ってテンプレート部品を読み込む

考慮しなければならないのは、テンプレート部品がプラグインに存在する場合、プラグインが(OpenPNEから見て)有効であるかどうかということです。これについては 1. を実装していく過程で整えていきたいと思います。

comment:11 Changed 12 years ago by ebihara

以下のリビジョンで対応しました。

  • ログイン画面用にパーツを追加し、そのパーツに拡張をおこなう形で新規登録用リンクをログインフォームにプラグイン側から追加できるように: r7979
  • スロットを利用してテンプレート拡張をおこなえるように : r8044

このテンプレート拡張の仕組みについてはリリース後に資料をまとめ、公開し、フィードバックを得て改善していきたいと思います。

comment:12 Changed 12 years ago by ebihara

Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.