Respostas:
Use entity_load
para carregar a entidade conforme mencionado por @Nikhil.
Em seguida, use entity_extract_ids , para extrair o pacote. Exemplo:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
A função entity_extract_ids
retorna uma matriz indexada numericamente (não uma tabela de hash) contendo os elementos:
onde, 0
, 1
, e 2
são índices de matriz. No entanto, a abordagem usada pelos módulos core e contrib é usar a list()
função.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Aqui está o mais limpo que recebi do código do módulo de grupos orgânicos.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Por exemplo, eu posso chamar assim:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Edit: Como o @Clive apontou, o método acima depende do módulo da entidade.
Aqui está outro método que não depende de nenhum módulo extra. É explicado aqui https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Copie colando esse método:
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 é o valor $bundle
?
entity_load
, a propósito, como é mais limpo?
entity_metadata_wrapper()
seja mais limpo que o entity_extract_ids()
método. Além disso, você confia no módulo de entidade que está sendo instalado ...
Tente entity_load
Carregar entidades do banco de dados.
As entidades são armazenadas em um cache de memória estática e não exigirão acesso ao banco de dados se forem carregadas novamente durante a mesma solicitação de página.
$ entity_type : o tipo de entidade a ser carregado, por exemplo, nó ou usuário.
$ ids : uma matriz de IDs de entidade ou FALSE para carregar todas as entidades.
$ conditions : (descontinuado) Uma matriz associativa de condições na tabela base, onde as chaves são os campos do banco de dados e os valores são os valores que esses campos devem ter. Em vez disso, é preferível usar EntityFieldQuery para recuperar uma lista de IDs de entidades carregáveis por essa função.
$ reset : se deve redefinir o cache interno para o tipo de entidade solicitado.
Uma matriz de objetos de entidade indexados por seus IDs. Quando nenhum resultado é encontrado, uma matriz vazia é retornada.
Se você deseja uma maneira muito leve, em termos de desempenho, para obter o tipo de nó a partir da identificação do nó - é possível usar uma única consulta de seleção na tabela de nós.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
Dessa forma, você não precisa invocar todo o sistema de ganchos de entidade, com entity_load etc.
É uma consulta de seleção única usando o ID do nó indexado.