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

Для того чтобы программно создать своё CCK-поле при установке своего модуля, вам нужно использовать хук install/uninstall в файле .install.

Порядок такой: сначала создаётся поле, а только потом его экземпляр. Удаляется в обратной последовательности.

Если использовать хуки enable/disable, то экземпляры поля будут создаваться при каждом включении модуля.

Вот здесь хорошо расписаны типы всех полей и типы виджетов Working programmatically with fields in Drupal 7

А вот, собственно, и сам код:

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);
  }  
}<span> </span>

 

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

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
CAPTCHA
А не робот ли вы случайно?
1 + 11 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.