Задача - создать пользовательскую форму редактирования поля field_body
у ноды типа Article. После отправки формы, новое значение должно быть обновлено у этого поля:
/**
* Form constructor for the edit "field_body".
*
* @see example_my_custom_form_submit()
* @ingroup forms
*/
function example_my_custom_form($form, $form_state, $node) {
$form_state['storage']['node'] = $node;
$form['#parents'] = array();
// Получаем язык поля.
$langcode = field_language('node', $node, 'field_body');
// Получаем текущее значение поля, будет использовано как значение по умолчанию.
$items = field_get_items('node', $node, 'field_body');
// Получаем информацию об поле и его инстансе, необходимо для генерации формы редактирования поля.
$field = field_info_field('field_body');
$instance = field_info_instance('node', 'field_body', 'article');
$form += field_default_form('node', $node, $field, $instance, $langcode, $items, $form, $form_state);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
}
/**
* Form submission handler for example_my_custom_form().
*
* @see example_my_custom_form()
* @ingroup forms
*/
function example_my_custom_form_submit($form, &$form_state) {
$node = $form_state['storage']['node'];
// Сохраняем новые значения.
field_attach_submit('node', $node, $form, $form_state);
field_attach_update('node', $node);
drupal_set_message(t('The data have been saved.'));
}