web-dev-qa-db-ja.com

新しいコンテンツタイプを追加するだけでなく、エンティティを作成するのが適切なのはいつですか?

新しいコンテンツタイプを作成するだけではなく、新しいエンティティタイプを作成する利点は何ですか?

コンテンツタイプにすべてのCRUDおよびビュー機能がすでに組み込まれている場合、新しいエンティティを作成するために必要なすべてのカスタムコーディングを行うのは少しやり過ぎに思えます。

86
revolt

それは利点が何であるかについてではなく、あなたが言ったように特定の状況に何が適切であるかについての詳細です。ノードでほとんどすべてを表すことができ、99%の状況では(少なくとも私が見つけたように)カスタムエンティティタイプを実装する必要はありません。

私は常にtaxonomy_termエンティティタイプを、すべてがノード/コンテンツタイプである必要がない理由の良い例として考えています。

分類用語は、本質的に異なるエンティティをグループ化するためのものであり、ノードと同じ機能を必要としません。 could理論的にはコンテンツタイプを使用してこの機能を実行しますが(ノード参照フィールドを使用)、分類用語はノードと同じことを行う必要がないため、実際には機能しません。そうする意味。 userおよびtaxonomy_vocabularyエンティティタイプについても同じことが言えます。

したがって、分類用語は別のエンティティとして作成され、必要なことだけを実行するようにプログラムされていますが、フィールドをアタッチできるなどの利点があります。

簡単な答えは、ノード/コンテンツタイプしないが必要なことを実行する場合、または非常に多くのオーバーキル/オーバーヘッドであり、ほとんどメリットがない場合、カスタムエンティティを記述します。

これは私の個人的な経験にのみ基づいています。 Drupalコア開発に直接関与している人がこれについて何を言わなければならなかったかを聞いてみたいです。

66
Clive

私が使用する非常に単純な経験則は、コンテンツを単独で公開する必要があるかどうかです。もしそうなら、ノードを選び、そうでなければエンティティを選びます。 Entityforms エンティティを入力するためのインターフェースを作成できるようになりました。

たとえば、D6で作成されたWebサイトで、広告コンテンツタイプ(画像フィールド、表示開始日/終了日など)を構築しますが、それを公開しないようにする必要があります非公開デフォルトで、編集者にこれらのノードを編集/表示する権限を付与します。ビュー/検索がこれらを外部に表示しないことを期待します。それはかなり面倒であり、エンティティを扱う方が簡単でしょう。

16
tostinni

エンティティは特定のユースケースを表します。

この単純な定義の功績は Fago にあると思いますが、参照を見つけるのが面倒です。

必要に応じて、すべてのユースケースでContent(別名Nodes)を使用することもできますが、多くの場合それは意味がありません。

Contentには、コメントとメニューの場所の両方の作成者と設定があります。

Usersは、Contentでは上記のどちらも意味がないため、userとは十分に異なるユースケースを表しますが、userには電子メールとパスワードが必要です。

Taxonomy terms目立つのは、階層的に配置される組み込み機能を備えているためです。

ユースケースが既存のエンティティに十分似ている場合は、そのエンティティを使用してください。エンティティが既存のルールとは大幅に異なるルールによって管理されている場合は、新しいルールを作成します。

エンティティの概要 もありますが、残念ながらそれは本当にあなたの質問に答えません。

12
Letharion

それはすべてコンテキストに関するものだと思います。ノードは主にコンテンツに使用されるため、ブログ、記事、FAQなどになります。一方、スタッフ、顧客などのプロファイルのユーザー。新しいエンティティを作成する場合の例:

  • フォーラム
  • プロジェクト(プロジェクト管理の観点から)
  • サポートチケット
  • グループ

ノードをサポートチケットのようなものに使用することはできますが、それは最良のテンプレートとデフォルトではない可能性があります...お役に立てば幸いです。

5
WestieUK

エンティティは、エンティティが持つすべての強力な機能を備える必要がないため、ノードよりも少ないオーバーヘッドで作成できます。

また、ストレージをよりシンプルにすることができます。必要に応じて、JOINSなしで簡単なクエリですべての情報を取得するように構築できます。すべてのフィールドが1つの整頓されたテーブルにうまく表示されます。

これは、エンティティに対してクエリを実行する必要がある多くの関数があり、データベースへのUPDATEクエリと同時に多数のエンティティを更新する場合に、非常に大きなメリットになります。データが単一のテーブルに比較的自己完結していることを確認できれば、データ破損の心配や可能性が少なくなります。

1
James

コンテンツタイプは、サイトコンテンツとして設計されています。つまり、各コンテンツタイプは、サイトに公開および表示されるように設計されています。たとえば、記事(箱から出してすぐ)は最初のページに表示されるように設計されています。

ここで、雇用申請書やアパートの申請書などを作成するとします。明らかに、あなたのウェブサイトで誰かの雇用申請書を公開したくないでしょう。また、顧客/リードの連絡先のリストを作成したい場合はどうなりますか?この情報があなたのWebサイトに誤って公開される可能性を考えますか?個人的にはそうしません。

したがって、上記のエンティティフォームモジュールです。コンテンツ用に設計されていないエンティティタイプを作成できます。ただし、これらのエンティティタイプは、ルール、ビュー、オーガニックグループなどのエンティティをサポートするすべてのモジュールで使用できます。

次に、Drupal商品がエンティティタイプであるコマースにアクセスします。基本的にエンティティは、開発者がDrupalでオリジナルのDrupalデザイナー。

0
Den Solis

これは議論の対象であり、最終的には開発者としての決定を下す必要があります。

独自のURLでデータを公開しない場合は常に、ノードよりもエンティティを選択します。ノードはデフォルトでURLエイリアス、公開ステータス、タイトル、メタタグなどを取得しますが、エンティティはデータベース内のレコードを取得します。

「できるだけ多くのテキスト付きのバナーを追加し、ブログ投稿でそれらのいずれかを選択できるようにしたい」

  • コンテンツタイプは「ブログ」になります
  • カスタムエンティティは「バナーアイテム」になります
0