2013-10-24 4 views
3

Я новичок в Drupal, и я ищу способ добавить новое поле к уже установленному типу контента в Drupal 7. Обратите внимание, что некоторые контент уже присутствует в базе данных. Кроме того, мне нужно делать это программно, а не через графический интерфейс.Добавление нового поля в существующий тип контента в Drupal 7

погуглить, я уже нашел следующие документы, которые, как представляется, связаны:

https://api.drupal.org/api/drupal/modules!field!field.module/group/field/7

https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_update_N/7

Тем не менее, мои идеи немного сумбурный и основным примером может прояснить вещи.

ответ

6

Этот сниппет должен вас начать. Он был найден на 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); 
+0

Спасибо за ваш ответ , Поскольку я не могу удалить или отключить модуль, потому что некоторый контент уже находится в db, в какой функции я должен добавлять новые поля? Является ли функция hook_update единственным способом? – Katie

+0

См. Мой обновленный ответ. Короткий ответ: вы можете запустить этот код по-разному, это зависит от того, будет ли это код, который вам нужно будет запускать снова и снова, независимо от того, хотите ли вы его частью процесса установки модуля, или если это просто то, что вам нужно запустить один раз. – KHMKShore

+0

Очень полезный пост, модуль field_inspector, может помочь экспортировать определения полей из пользовательского интерфейса. – weaveoftheride

Смежные вопросы