Задача:
Нужно создать программно 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);
}
'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);
}
Использованные материалы:
Bookmark/Search this post with










