4

私のモジュールは、カスタムフィールドタイプをで定義しますhook_field_info()。このhook_install()モジュールでは、このカスタムフィールドタイプの新しいフィールドとインスタンスを作成しようとしています。

function my_module_install() {

  if (!field_info_field('my_field')) {
    $field = array(
      'field_name' => 'my_field',
      'type' => 'custom_field_type',
      'cardinality' => 1
    );
    field_create_field($field);
  }
}

コードは次の場所でクラッシュしfield_create_field($field)ます:

WD php: FieldException: Attempt to create a field of unknown type custom_field_type. in field_create_field() (line 110 of                                            [error]
/path/to/modules/field/field.crud.inc).
Cannot modify header information - headers already sent by (output started at /path/to/drush/includes/output.inc:37) bootstrap.inc:1255                             [warning]
FieldException: Attempt to create a field of unknown type <em class="placeholder">custom_field_type</em>. in field_create_field() (line 110 of /path/to/modules/field/field.crud.inc).

どうしたの?

4

1 に答える 1

9

フィールドタイプを定義するモジュールを有効にしようとしていて、有効にする前に、そのモジュールで同じフィールドタイプを使用しようとしていますhook_install()。Drupalのフィールド情報キャッシュはhook_install()実行前に再構築されないため、フィールドを作成しようとしているときにDrupalはモジュール内のフィールドタイプを認識しません。

これを回避するには、field_info_cache_clear()前に呼び出してフィールド情報キャッシュを手動で再構築しfield_create_field($field)ます。

if (!field_info_field('my_field')) {
  field_info_cache_clear();

  $field = array(
    'field_name' => 'my_field',
    'type' => 'custom_field_type',
    'cardinality' => 1
  );
  field_create_field($field);
}
于 2012-08-20T22:02:46.717 に答える