Réponses:
Utilisez entity_load
pour charger l'entité comme mentionné par @Nikhil.
Utilisez ensuite entity_extract_ids pour extraire le bundle. Exemple:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
La fonction entity_extract_ids
renvoie un tableau indexé numériquement (pas une table de hachage) contenant les éléments:
où 0
, 1
et 2
sont des indices de tableau. Cependant, l'approche utilisée par les modules core et contrib consiste à utiliser la list()
fonction.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Voici le plus propre que j'ai obtenu du code de module des groupes organiques.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Par exemple, je peux l'appeler comme:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Edit: Comme l'a souligné @Clive, la méthode ci-dessus dépend du module d'entité.
Voici une autre méthode qui ne dépend d'aucun module supplémentaire. Il est expliqué ici https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Copiez-collez cette méthode:
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
? et quelle est la valeur $bundle
?
entity_load
, d'ailleurs, comment est-ce le plus propre?
entity_metadata_wrapper()
soit plus propre que la entity_extract_ids()
méthode. De plus, vous comptez sur le module d'entité installé ...
Essayez entity_load
Chargez des entités à partir de la base de données.
Les entités sont stockées dans un cache de mémoire statique et ne nécessiteront pas d'accès à la base de données si elles sont chargées à nouveau lors de la même demande de page.
$ entity_type : type d'entité à charger, par exemple nœud ou utilisateur.
$ ids : un tableau d'ID d'entité, ou FALSE pour charger toutes les entités.
$ conditions : (obsolète) Un tableau associatif de conditions sur la table de base, où les clés sont les champs de la base de données et les valeurs sont les valeurs que ces champs doivent avoir. Au lieu de cela, il est préférable d'utiliser EntityFieldQuery pour récupérer une liste des ID d'entité chargeables par cette fonction.
$ reset : Indique s'il faut réinitialiser le cache interne pour le type d'entité demandé.
Tableau d'objets d'entité indexés par leurs identifiants. Lorsqu'aucun résultat n'est trouvé, un tableau vide est renvoyé.
Si vous voulez un moyen très léger, en termes de performances, pour obtenir le type de nœud à partir de l'ID de nœud - vous pouvez utiliser une seule requête de sélection sur la table des nœuds.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
De cette façon, vous n'avez pas besoin d'appeler l'ensemble du système de hook d'entité, avec entity_load etc.
Il s'agit d'une seule requête de sélection utilisant l'ID de nœud indexé.