Drupal Bundle Inherit-エンティティタイプを継承するためのモジュール

一般的な考え方



このモジュールを開発するというアイデアは、(しばしば起こるように)緊急の必要性によって決定されました。



オンラインストア(または、さまざまな種類のコンテンツを作成する予定のその他のプロジェクト)を編成しているとします。 Drupal 7 + Commerceバンドルをソフトウェアパッケージとして選択したとします。 コマースでは、さまざまなタイプの製品を作成することができます。 これは、さまざまなカテゴリの商品を取引する場合に便利です。それぞれの商品は、独自のデータの種類によって特徴付けられます。 たとえば、モニターの場合は、マトリックスのタイプを指定する必要がありますが、プロセッサーの場合は、クロック周波数を指定するとよいでしょう。



ここで、多くのカテゴリが相互接続された階層関係を持つカタログを整理する必要がある状況を想像してください。 明確にするために、同様の構造を想像してください。



すべての製品について、製造国、製造元、製造年を指定するとします。 それを基本型と呼びます。 コンピューターを販売するとします。 すべてのコンピューターには共通の特性(オペレーティングシステム、USBポートの数など)があります。 ラップトップ、デスクトップ、タブレットを販売します。 それらはすべてコンピューターの特性を持ち、それぞれに固有の特性があります(例えば、ラップトップのバッテリー寿命)。



したがって、次のスキームが得られます。

  1. ベースタイプ
  2. コンピューター(基本タイプを継承)
  3. ラップトップ、PC、タブレット(「コンピューター」のタイプを継承)


モジュールを提供するもの



バンドル継承モジュールを使用すると、新しいコンテンツタイプ(エンティティバンドル)を作成するときに、同じエンティティタイプの既存のタイプの1つから継承できます。 この場合、親タイプで使用可能なすべてのフィールドは、新しく作成されたタイプに自動的に関連付けられます。



もっと面白い。 このモジュールは、softとstrictの2種類の継承をサポートしています。



ソフトタイプの継承の場合、プロセスは次のようになります。 新しいエンティティタイプを作成するとき、選択された親タイプのフィールドは単にエンティティタイプにアタッチされます。 これにより、モジュールは作業を終了し、これらのタイプを追跡しません。



厳密な継承の場合、以下が発生します。 ソフト継承の場合と同様に、親タイプのすべてのフィールドは新しいタイプに関連付けられます。 この場合、新しいタイプの継承されたフィールドのインスタンスはブロックされ、編集および削除のためにアクセスできなくなります。 次に、モジュールは親タイプの追跡を開始します。 モジュールは3つの状況に応答します。

  1. 新しいフィールドを作成すると、このフィールドのインスタンスはすべての子タイプ(親から継承されたタイプ)に自動的に付加されます。
  2. 親タイプでフィールドインスタンスが変更されると、すべての変更は自動的に継承されたインスタンスに転送されます。
  3. フィールドインスタンスが親タイプから削除されると、すべての子タイプでフィールドのロックが解除され、編集および削除が可能になります。 将来的には、フィールドとすべての関連データを子タイプから自動的に削除することに同意または拒否する機会をユーザーに提供する予定です。


モジュールはどのように構成されていますか



モジュールは、実際には2つのモジュールのセットです。



最初の(bundle_inheritモジュール)は、モジュール開発者にAPIを提供し、エンドユーザーに機能を提供しません。



2番目(bundle_inherit_nodeモジュール)は、Bundle Inherit APIの使用例です。 コメントを含むわずか40行のコードで構成されるこのモジュールは、ノードシステムモジュールを拡張して、コンテンツタイプを継承できるようにします。



モジュールの使用



エンドユーザーの視点から


新しいコンテンツタイプを作成するときは、[継承]タブを見つけ、対応するボックスをオンにして、親タイプを選択します。 これだ。



開発者の観点から


サンプルのbundle_inherit_nodeモジュールを使用した実装を参照してください。

任意のタイプのエンティティに継承の可能性を追加するために必要なのは、新しいタイプを作成するためのフォームを見つけて、その上でbundle_inherit_attach_inherit_form関数を使用することだけです。 また、送信コールバックを追加して、その中のbundle_inherit_attach_inherit_form_submit関数を呼び出すことを忘れないでください。 そして、それが魔法と呼ばれるものです。



見込み



彼らです。 Bundle Inherit APIの機能を拡張して、フィールドだけでなく、さまざまなタイプのエンティティの内部ロジックと統合するための継承ロジックのアプリケーションを許可する予定です。

モジュールを拡張するための別の可能な方向は、抽象的なエンティティタイプを作成する機能です。 継承にのみ使用できるタイプ。



入手先



Drupal.org:drupal.org/project/bundle_inherit

GitHub: github.com/numesmat/Drupal-Bundle-Inherit



All Articles