将字段附加到Drupal中的实体包

时间:2013-08-12 16:58:00

标签: php drupal

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

我正在调查entityfieldquery,entity_load和entity_get_info,而且我倾向于entity_get_info,但现在我正在阅读该用法已被弃用。

function multi_reg_bundle_select() {


$query = entity_get_info('registration');


}

如何从附件中获取信息? ( '注册[' 软件包名称 ']')?最终,我只想将字段附加到特定的包中。最好是一串字符串。

3 个答案:

答案 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