Risposte:
Utilizzare entity_load
per caricare l'entità come indicato da @Nikhil.
Quindi utilizzare entity_extract_ids , per estrarre il pacchetto. Esempio:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
La funzione entity_extract_ids
restituisce un array indicizzato numericamente (non una tabella hash) contenente gli elementi:
dove 0
, 1
e 2
sono indici degli array. Tuttavia, l'approccio utilizzato dai moduli core e contrib è di utilizzare la list()
funzione.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Ecco il più pulito che ho ottenuto dal codice del modulo gruppi organici.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Ad esempio, posso chiamarlo come:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Modifica: come sottolineato da @Clive, il metodo sopra dipende dal modulo entità.
Ecco un altro metodo che non dipende da nessun modulo aggiuntivo. È spiegato qui https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Copia incollando quel metodo:
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
? e qual è il valore $bundle
?
entity_load
il modo in cui è più pulito?
entity_metadata_wrapper()
sia più pulito del entity_extract_ids()
metodo. Inoltre fai affidamento sul modulo entità in fase di installazione ...
Prova entity_load
Caricare entità dal database.
Le entità sono archiviate in una cache di memoria statica e non richiederanno l'accesso al database se caricate di nuovo durante la stessa richiesta di pagina.
$ entity_type : il tipo di entità da caricare, ad esempio nodo o utente.
$ ids : una matrice di ID entità o FALSE per caricare tutte le entità.
$ condition : (obsoleto) Un array associativo di condizioni nella tabella di base, in cui le chiavi sono i campi del database e i valori sono i valori che tali campi devono avere. È preferibile invece utilizzare EntityFieldQuery per recuperare un elenco di ID entità caricabili da questa funzione.
$ reset : se ripristinare la cache interna per il tipo di entità richiesto.
Un array di oggetti entità indicizzati dai loro ID. Quando non viene trovato alcun risultato, viene restituita una matrice vuota.
Se si desidera un modo molto leggero, dal punto di vista delle prestazioni, per ottenere il tipo di nodo dall'ID nodo, è possibile utilizzare una query di selezione singola nella tabella dei nodi.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
In questo modo, non è necessario richiamare l'intero sistema hook entità, con entity_load ecc.
È una singola query di selezione che utilizza l'id nodo indicizzato.