Entity Construction Kit (ECK)

Drupal のエンティティ(の種類)を簡単に追加出来るモジュールです。

エンティティとは、Drupal 7 から導入された概念で、ノード、ユーザー、タクソノミーターム、コメントなど、サイトの主な構成要素の「実態」を表すもので、これらは共通の様式で扱えるようになっています。(これにより、ノードだけでなくコメントやタクソノミーターム、ユーザーにも同じ様式でフィールドを追加することが出来るようになりました。)

Drupal にはこれらの既存のエンティティに加えて、独自のエンティティ(の種類)を追加する機能があります。
これはカスタムモジュールに hook_entity_info() を実装することで可能となりますが、ECK モジュールはこれをもっと容易にし、さらに管理画面上の UI も提供します。

※ 独自のエンティティ(の種類)の追加が効果的な場合の例としては、例えば前回紹介した Message モジュールの提供する「メッセージ」(ユーザーアクティビティーなどのログ)や、ECサイトにおける「注文」データなどがあると思います。これらは「ノード」として実装することも出来なくはないと思いますが、どうしても無駄が多くなってしまいますし、管理上も大変になるでしょう。これは、「ノード」というエンティティが、言ってみれば「ページとして人に読まれるためのドキュメント(記事)」を前提としたものだからです。「ユーザーアクティビティー」にしても「注文」にしても、個別にページとして表示する機会はあるかもしれませんが、本来の目的はそれではなく、「データを記録・管理すること」にあるはずです。発生する頻度もドキュメントを作成するのに比べれば桁違いになるでしょう。このため、ノードとは別のテーブルでデータを管理する、つまり独自のエンティティタイプとして実装することは効果的だと思います。

このように「ノード」、「ユーザー」、「タクソノミーターム」、「コメント」、「ファイル」、等の既存のエンティティのタイプに当てはまらないようなデータを扱う必要がある場合には、独自のエンティティタイプを独自の仕様で追加するようにするのが、Drupal を使ったウェブアプリケーション構築では正攻法のようです。

ECKモジュールのUIを使ったエンティティタイプの追加方法

例えば、記事の投稿やコメントの投稿など、サイト内でのさまざまな活動に応じてユーザーがポイントを獲得し、溜まったポイントで何かしらの景品や特典と交換できるようなサイトを考えてみます。この場合「ポイント」というエンティティタイプを新たに追加するのが効果的でしょう。

図1

ECK モジュールをインストールして「サイト構築(/admin/structure)」から、「Entity types」をクリック。

図2

まだ ECK モジュールが扱うエンティティタイプはありません。「Add entity type」をクリックします。

図3

エンティティタイプの作成画面です。「Entity Type」のところにエンティティの名前、システム内部名称のところにシステム内部名称を入力します。「Bundle」のところに最初に作成するバンドル(ノードでいうところのコンテンツタイプに該当するもの)を入力します。ここは空欄にするとデフォルトでそのエンティティの名前(とシステム内部名称)が使用されます。
Default Properties でエンティティのプロパティに追加したい項目を「Title」「Author」「Created」「Changed」「Entity language」のなかから必要なだけ選びます。エンティティのプロパティは、そのエンティティのテーブルの中のフィールド(カラム)として追加されます。

図4

Entity types のページ(/admin/structure/entity-type)にもういちどアクセスすると、今追加したエンティティタイプ「ポイント」が追加されているので、これをクリックします。

図5

エンティティタイプ「ポイント」のバンドル一覧ページに移ります。必要な場合は「Add bundle」のリンクから、バンドルを追加することが出来ます。 ここで「MANAGE PROPERTIES」のタブをクリックすると、プロパティの管理画面に移動します。

図6

プロパティ管理画面です。ここではデフォルトで用意されている「Title」「Author」「Created」「Changed」「Entity language」の5つのプロパティに加えて、必要な場合は Add new property のところから独自のプロパティを追加することが出来ます。

図7

その際、Behavior のところで、独自に追加するプロパティの挙動(例えば「Created」プロパティでいうと、エンティティが追加されたとき、その時間を自動的に格納します)を選択します。適当なものが無い場合は cTools プラグインとして自作することも出来ます。(※ ここでは使用しませんが、図では「プロパティ入力(数値)」と「サブタイトル」というプラグインを追加しています。)

図8

もういちど「ポイント」のバンドル一覧ページにアクセスし、バンドル名「ポイント」をクリックします。

図9

「ポイント」のエンティティ一覧ページに移ります。まだこのエンティティタイプのエンティティはありません。これはノードでいうところの「コンテンツ一覧」ページです。

図10

「フィールドの管理」タブをクリックすると、フィールドの管理画面に移ります。これは通常のフィールド管理画面と同じ様式なので、コンテンツタイプにフィールドを追加するのと同じ要領で、バンドルごとにそれぞれ必要なフィールドを追加することが出来ます。ここで、たとえばユーザーとの関連付けのための Entity Refference フィールドや、日付時刻のフィールド、ポイントの増減値や残高を格納するフィールド等、任意のフィールドを追加することが出来ます。

図11

「表示管理」のタブをクリックすると、コンテンツタイプの「表示管理」と同様、フィールドの表示の設定をすることが出来ます。

コア: 
Drupal7