Программно создать CCK-поле.

20 Май 2010
Опубликовано VladSavitsky
Задача: 

Нужно создать программно CCK-поле. Например, может потребоваться создать CCK-поле из hook_update_N.

Решение:
В отличии от предыдущих версий ССК в версии под 6ку манипулирование полями из кода стало проще.

  • Сначала нужно создать поле с помощью пользовательского интерфейса CCK
  • Далее нужно использовать PHP-функцию var_export(), чтобы получить дамп поля ноды в виде массива:
    var_export(content_fields('field_ИМЯ_ПОЛЯ', 'ТИП_КОНТЕНТА'));

    См. API: http://drupalcontrib.org/api/function/content_fields

Вы получите большой массив, который вы можете скопировать в ваш код и использовать примерно так:

$field = array (
  'field_name' => 'field_translator_note',
  'type_name' => 'feature',
  'display_settings' =>
  array (
    4 =>
    array (
      'format' => 'hidden',
    ),
    2 =>
    array (
      'format' => 'hidden',
    ),
    3 =>
    array (
      'format' => 'hidden',
    ),
    'label' =>
    array (
      'format' => 'hidden',
    ),
    'teaser' =>
    array (
      'format' => 'hidden',
    ),
    'full' =>
    array (
      'format' => 'hidden',
    ),
  ),
  'widget_active' => '1',
  'type' => 'text',
  'required' => '0',
  'multiple' => '0',
  'db_storage' => '0',
  'module' => 'text',
  'active' => '1',
  'columns' =>
  array (
    'value' =>
    array (
      'type' => 'text',
      'size' => 'big',
      'not null' => false,
      'sortable' => true,
    ),
  ),
  'text_processing' => '0',
  'max_length' => '',
  'allowed_values' => '',
  'allowed_values_php' => '',
  'widget' =>
  array (
    'rows' => '',
    'default_value' =>
    array (
      0 =>
      array (
        'value' => '',
      ),
    ),
    'default_value_php' => NULL,
    'label' => 'Translator\'s note',
    'weight' => NULL,
    'description' => '',
    'type' => 'text_textarea',
    'module' => 'text',
  ),
);

// Нужно загрузить CCK -файл, где определена функция content_field_instance_create()
module_load_include('inc', 'content', 'includes/content.crud');

// Я хочу добавить поле в несколько типов контента, поэтому используется цикл...
foreach (array('ТИП1', 'ТИП2', 'ТИП3', 'ТИП4') as $type) {
  // ... и меняется тип контента в самом поле.
  $field['type_name'] = $type;
  content_field_instance_create($field);
}

Использованные материалы: 
Авторы решений:
Темы:
Версия Drupal:
Модули:
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>