回答:
entity_load
@Nikhilで言及されているようにエンティティをロードするために使用します。
次に、entity_extract_idsを使用して、バンドルを抽出します。例:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
関数entity_extract_ids
は、要素を含む数値でインデックス付けされた配列(ハッシュテーブルではない)を返します。
ここで、0
、1
、および2
配列インデックスです。ただし、coreおよびcontribモジュールで使用されるアプローチは、list()
関数を使用することです。
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
ここで最もクリーンな私はオーガニックグループモジュールコードから得たことを一つ。
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
たとえば、次のように呼び出すことができます。
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
編集:@Cliveが指摘したように、上記の方法はエンティティモジュールに依存します。
追加モジュールに依存しない別の方法を次に示します。それはここで説明されていますhttps://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
そのメソッドをコピーして貼り付けます:
function _entity_get_bundle($entity, $entity_type) {
$info = entity_get_info($entity_type);
if (empty($info['entity keys']['bundle'])) {
return $entity_type;
} else {
return $entity->{$info['entity keys']['bundle']};
}
}
$group_type, $gid
?そして、値は$bundle
どうですか?
entity_load
ように、いかにその最もクリーンなことをすることができますか?
entity_metadata_wrapper()
、entity_extract_ids()
メソッドよりもきれいだとは思いません。さらに、インストールされているエンティティモジュールに依存しています...
トライentity_load
データベースからエンティティをロードします。
エンティティは静的メモリキャッシュに保存され、同じページリクエスト中に再度読み込まれた場合、データベースアクセスを必要としません。
$ entity_type:ロードするエンティティタイプ(ノードやユーザーなど)。
$ ids:エンティティIDの配列、またはすべてのエンティティをロードする場合はFALSE。
$ conditions:(非推奨)ベーステーブルの条件の連想配列。キーはデータベースフィールドで、値はフィールドに必要な値です。代わりに、EntityFieldQueryを使用して、この関数でロード可能なエンティティIDのリストを取得することをお勧めします。
$ reset:リクエストされたエンティティタイプの内部キャッシュをリセットするかどうか。
IDでインデックス付けされたエンティティオブジェクトの配列。結果が見つからない場合は、空の配列が返されます。
ノードIDからノードタイプを取得する非常に軽量な方法が必要な場合は、ノードテーブルで単一の選択クエリを使用できます。
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
そうすれば、entity_loadなどを使用してエンティティフックシステム全体を呼び出す必要がなくなります。
これは、インデックス付きノードIDを使用した単一の選択クエリです。