Как создать и создать экземпляр нового пользовательского поля в hook install () модуля, который объявляет это пользовательское поле?
Мой модуль определяет пользовательский тип поля с помощью 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).
Что случилось?
1 ответ:
Вы пытаетесь включить модуль, который определяет типы полей и пытается использовать те же типы полей в своем
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); }