Этот сниппет должен вас начать. Он был найден на Drupal Stackexchange. Я предлагаю вам сначала проверить его в будущем.
https://drupal.stackexchange.com/questions/8284/programmatically-create-fields-in-drupal-7
$myField_name = "my_new_field_name";
if(!field_info_field($myField_name)) // check if the field already exists.
{
$field = array(
'field_name' => $myField_name,
'type' => 'image',
);
field_create_field($field);
$field_instance = array(
'field_name' => $myField_name,
'entity_type' => 'node',
'bundle' => 'CONTENT_TYPE_NAME',
'label' => t('Select an image'),
'description' => t(''),
'widget' => array(
'type' => 'image_image',
'weight' => 10,
),
'formatter' => array(
'label' => t('label'),
'format' => 'image'
),
'settings' => array(
'file_directory' => 'photos', // save inside "public://photos"
'max_filesize' => '4M',
'preview_image_style' => 'thumbnail',
'title_field' => TRUE,
'alt_field' => FALSE,
)
);
field_create_instance($field_instance);
drupal_set_message("Field created successfully!");
}
Вы можете выполнить этот код бесчисленными способами. Я не отношусь к требованиям вашего проекта, поэтому мне трудно сделать рекомендацию. Вы можете подключить это в обновление/установить функции, или вы могли бы построить его в странице крюк в модуле, или вы могли бы просто самонастройки любого нового файла PHP в корневой директории с этим:
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Спасибо за ваш ответ , Поскольку я не могу удалить или отключить модуль, потому что некоторый контент уже находится в db, в какой функции я должен добавлять новые поля? Является ли функция hook_update единственным способом? – Katie
См. Мой обновленный ответ. Короткий ответ: вы можете запустить этот код по-разному, это зависит от того, будет ли это код, который вам нужно будет запускать снова и снова, независимо от того, хотите ли вы его частью процесса установки модуля, или если это просто то, что вам нужно запустить один раз. – KHMKShore
Очень полезный пост, модуль field_inspector, может помочь экспортировать определения полей из пользовательского интерфейса. – weaveoftheride