web-dev-qa-db-ja.com

Entity APIおよびContribモジュール

Entity APIを使用する場合、分類法、Path/Pathauto、XMLサイトマップ、ビューとのやり取りはかなり簡単ですか?もしそうなら、私はAPIのどの部分を見るべきですか?

2
Kevin

Entity API は、実際にはコアエンティティ/フィールドAPIで機能すると機能する個別の提供モジュールであるため、質問は少し混乱します

私はコアEntityFieldQueryクラスを使用していて、ノード(および他のエンティティ)、それらのフィールド、およびプロパティをクエリするために使用しており、大きな成功を収めています。いくつかの例を作成している別の質問をチェックアウトできます: EntityFieldQueryの適切な使用法は何ですか?

全体的に見て、Entity APIは自分のエンティティを作成するのに非常に便利であることがわかりましたが、自分のサイトのコンテンツに対してクエリを実行するための優れたドキュメントは見つかりませんでした。

ノード/ユーザーがエンティティーになり、ノードタイプ/その他が「バンドル」と見なされるようになったことに注意してください。

参考文献:

3
electblake

元の質問とelectblakeの回答に応えて、Entity API提供のモジュールがコアエンティティシステムとは別であり、異なるという事実を私は2番目に述べます。より堅牢なエンティティコントローラー(エンティティの作成、読み込み、保存、削除に使用されるコード)を提供し、いくつかの自動トークン生成を提供し、モジュールがエンティティのプロパティのメタデータを定義できるようにすることで、コアシステムを強化することを意図しています。

electblakeは、コアエンティティシステムには、EntityFieldQueryと呼ばれるプロパティとフィールドデータに基づいてデータベース内のエンティティをクエリするためのクラスが含まれていると述べました。これは、エンティティクエリを作成するための推奨方法です。 Entity APIは、実際にはクエリツールではありません。ただし、私の意見では、エンティティとフィールドを使用して堅牢な寄付モジュールを構築するためのもう1つの欠けている部分、エンティティメタデータラッパーが提供されます。

すでに述べたように、Entity APIモジュールは、エンティティのプロパティ(つまり、$ node-> uid、$ node-> created)のメタデータを定義できるフックを提供します。この情報と、フィールド定義およびインスタンスについて認識している情報を組み合わせます。次に、エンティティを "ラップ"して、フィールドデータおよび(私が呼ぶもの)ラッパーオブジェクトを介して参照されるエンティティデータへのアクセスと操作を容易にします。これによって私にとって簡単になった主なことの1つは、エンティティのフィールドデータにアクセスするときにエンティティの言語を気にする必要がないことです。ラッパーがなければ、アクセスまたは操作しようとしているデータのスキーマ配列を知る必要があります。これを使用すると、他のプロパティと同様にフィールドデータに簡単にアクセスできます。

さらに、参照されるエンティティのデータに簡単にアクセスできます。 Drupal Commerceでは、いくつかのエンティティが主に他のエンティティへの参照のコンテナとして機能するため、この機能を広範囲に使用しています。元の投稿で言及した有用性に近づく例は、ノードによって参照されるすべての分類用語にすばやくアクセスできます。これをラッパーで行う簡単な方法は、ノードをラップし、分類参照フィールドのデータをループして完全に読み込まれた用語データにアクセスすることです。これを実証するのは難しい広範なコードスニペットは含まれていませんが、Drupal entity_metadata_wrapperのCommerceソースをgreppingすることで、これを機能させる方法を簡単に確認できます。

陪審は、Entity APIがいかに有用であるか、または広く普及するかについてまだ出ていませんが、それはルール2の依存関係であるため、すぐにどこかに行くとは思えません。これは、electblakeへの応答に基づいて少し多すぎる情報かもしれませんが、Entity APIに関する詳細情報を検索するときにこの質問を見つけた他の人にとって役立つ情報であると思います。 :)

7
Ryan Szrama

Entity APIを使用して、いくつかの新しいエンティティとバンドルを作成しています。これまでに報告できることは次のとおりです。

ビューの使用:モジュールをビューに公開し、テーブルなどを記述したら、非常に簡単で簡単です。参照: hook_views_data およびビューに関する高度なヘルプ情報

分類法の使用:(悲しいトロンボーン)。分類法テーブルは、nidごとにデータを保管します。つまり、エンティティのテーブルを調べるように分類法に指示する方法はありません。私は自分のバージョンのtaxonomy_indexテーブルを作成して、可能な限り分類法を試してみる必要がありました。

あなたが言及する他のモジュールの経験はありませんが、同じ原則が当てはまると思います:モジュールがノードとnidを想定している場合、エンティティではうまく機能しません。そうでなければ、私はあなたが物事を統合することができると思います。

HTH

4
patrickmj

エンティティを処理する最も簡単で一貫した方法は、 Entity API モジュールを使用することです。

このモジュールは、DrupalコアのエンティティAPIを拡張して、エンティティとそのプロパティを処理する統一された方法を提供します。さらに、新しいエンティティの作成を簡素化するのに役立つエンティティCRUDコントローラを提供しますタイプ。

0
tim.plunkett