Answers:
使用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
是数组索引。但是,核心模块和贡献模块使用的list()
方法是使用该功能。
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
这是我从Organic groups模块代码中获得的最干净的代码。
$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_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的单一选择查询。