我不想从字段中获取任何信息,我想要获得的是附加到特定包(实体实例)的字段机器名称。
我正在调查entityfieldquery,entity_load和entity_get_info,而且我倾向于entity_get_info,但现在我正在阅读该用法已被弃用。
function multi_reg_bundle_select() {
$query = entity_get_info('registration');
}
如何从附件中获取信息? ( '注册[' 软件包名称 ']')?最终,我只想将字段附加到特定的包中。最好是一串字符串。
答案 0 :(得分:3)
您可以在https://drupal.stackexchange.com/questions/14352/listing-entity-fields
找到答案简短回答:使用
$fields = field_info_instances();
获取有关所有实体类型和包的所有信息,或使用
$fields = field_info_instances('node', 'article');
仅获取节点类型“article”的字段。
答案 1 :(得分:3)
只获取附加到特定包的字段机器名称的最简单方法是:
$field_names = array_keys(field_info_instances('node', 'article'));
使用已经提到的功能; field_info_instances()在某些情况下的缺点是它不提供字段 type 。 Drupal 7中最轻的功能是field_info_field_map()。它可以放在这样的辅助函数中:
/**
* Helper function to return all fields of one type on one bundle.
*/
function fields_by_type_by_bundle($entity_type, $bundle, $type) {
$chosen_fields = array();
$fields = field_info_field_map();
foreach ($fields as $field => $info) {
if ($info['type'] == $type &&
in_array($entity_type, array_keys($info['bundles'])) &&
in_array($bundle, $info['bundles'][$entity_type]))
{
$chosen_fields[$field] = $field;
}
}
return $chosen_fields;
}
并像这样使用它来获取文章内容类型的所有分类字段:
$fields = fields_by_type_by_bundle('node', 'article', 'taxonomy_term_reference');
请注意,field_info_field_map()仅提供机器名称(作为请求的原始海报),但您必须使用field_info_field()加载字段对象以获取字段标签(人类可读的名称)
答案 2 :(得分:0)
我相信field_info_bundles()可能就是我想要的。当我测试它时,我会让人们知道(但是,如果你有建议,我很高兴听到它们!)
https://api.drupal.org/api/drupal/modules!field!field.info.inc/function/field_info_bundles/7