Программное создание CCK-поля в Drupal 7

Для того чтобы программно создать своё CCK-поле при установке своего модуля, вам нужно использовать хук install/uninstall в файле .install.
Порядок такой: сначала создаётся поле, а только потом его экземпляр. Удаляется в обратной последовательности.
Если использовать хуки enable/disable, то экземпляры поля будут создаваться при каждом включении модуля.
Вот здесь хорошо расписаны типы всех полей и типы виджетов http://ado.io/blog/drupal-7/working-programmatically-with-fields-in-drup...
А вот, собственно, и сам код:

function mail_ru_auth_install() {
  $fieldname='field_mailru_first_name';// имя поля
  if (!($field = field_info_field($fieldname))) // если информации о таком поле как об установленном нет - то добавим его
  {
    $field = array(
      'field_name'=>$fieldname, // имя поля
      'type'=>'text',// его тип 
      'cardinality' => 1,
      'settings' => array(),
      'entity_types' => array('user', 'node'), // видимо сущности к которым можно будет привязывать экземпляры поля
      );
 
    field_create_field($field); // создаем поле
  }
 
  // работаем с экземпляром поля
  if (!($field = field_info_instance('user', $fieldname, 'user'))) //если экземлпяр поля не //известен как "установленный" - создадим его
  {
     $instance = array(
      'field_name'=>$fieldname,
      'entity_type' => 'user', // указываем сущность к которой будет относится экземляр поля
      'label'=>t('First name'),
      'bundle' => 'user',
      'type'=>'text',
      'widget'=>array(
        'type'=>'text_textfield'
      ),
    );
    field_create_instance($instance); //создаём экземпляр этого поля и привязываем его к пользователю
  }
}
 
function mail_ru_auth_uninstall() {
  $fieldname='field_mailru_first_name';// имя поля
  if ($field = field_info_instance('user', $fieldname, 'user')) // если поле существует - удалим его
  { 
    field_delete_instance($field);
  }
 
  if ($field = field_info_field($fieldname)) 
  {
    field_delete_field($field);
  }  
}
Drupal 7

Комментарии

Добавить комментарий