1

我不想从字段中获取任何信息,我只想获取附加到特定捆绑包(实体实例)的字段机器名称。

我正在研究 entityfieldquery、entity_load 和 entity_get_info,并且我倾向于 entity_get_info,但现在我正在阅读已弃用的内容。

function multi_reg_bundle_select() {


$query = entity_get_info('registration');


}

如何从附加的捆绑包中获取信息?('注册['bundlename']')?最终,我只想获取附加到特定捆绑包的字段。最好在字符串数组中。

4

3 回答 3

3

您可以在https://drupal.stackexchange.com/questions/14352/listing-entity-fields找到答案

简短的回答:使用

$fields = field_info_instances();

获取有关所有实体类型和捆绑包的所有信息,或使用

$fields = field_info_instances('node', 'article');

仅获取节点类型“文章”的字段。

于 2015-01-16T13:42:50.037 回答
3

仅获取附加到特定捆绑包的现场机器名称的最简单方法是:

$field_names = array_keys(field_info_instances('node', 'article'));

使用已经提到的功能;在某些情况下field_info_instances()的一个缺点是它不提供字段类型。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()加载字段对象才能获取字段标签(人类可读的名称)。

于 2016-02-02T00:37:59.327 回答
0

我相信 field_info_bundles() 可能是我正在寻找的。当我测试它时,我会让人们知道(但是,如果你有建议,我很高兴听到他们的声音!)

https://api.drupal.org/api/drupal/modules!field!field.info.inc/function/field_info_bundles/7

于 2013-08-12T17:02:00.253 回答