Пользовательское поле Drupal 7 сохраняет только первый символ

Я по существу пытаюсь создать свой первый модуль типа поля, используя новый API-интерфейс Drupal 7. Мне удалось отобразить его правильно в режиме редактирования.
Однако, когда я пытаюсь сохранить некоторые данные, он сохраняет только первый символ.

Вот модуль:

<?php function youtubefield_field_info() { return array( 'youtubefield_video' => array( 'label' => t('Youtube video'), 'description' => t('This field stores a youtube video ID and displays the video associated with it'), 'settings' => array( 'max_length' => 11, ), 'instance_settings' => array( 'text_processing' => false, ), 'default_widget' => 'youtubefield_video_widget', 'default_formatter' => 'youtubefield_video_formatter', ), ); } function youtubefield_field_widget_info() { return array( 'youtubefield_video_widget' => array( 'label' => t('Default'), 'field types' => array('youtubefield_video'), ), ); } function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $element['#type'] = 'textfield'; $element['#default_value'] = isset($items[$delta]) ? $items[$delta] : ''; return $element; } function youtubefield_field_is_empty($item, $field) { return !$item; } function youtubefield_field_formatter_info() { return array( 'youtubefield_video_formatter' => array( 'label' => t('Youtube video'), 'field types' => array('youtubefield_video'), ), ); } 

И вот установщик:

 <?php function youtubefield_field_schema($field) { return array( 'columns' => array( 'value' => array( 'type' => 'varchar', 'length' => 11, 'not null' => true, ), ), 'indexes' => array(), ); } 

EDIT: проблема, похоже, связана с виджетами, поскольку она отлично работает, когда она получает данные программно.

    Эта форма виджета работала для меня:

     function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta,\ $element) { $main_widget = array(); switch ($instance['widget']['type']) { case 'youtubefield_video_widget': $main_widget = $element + array( '#type' => 'textfield', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, ); break; } $element['value'] = $main_widget; return $element; } 

    У меня была та же проблема, и findd hook_field_widget_form () нужно вернуть: «$ element ['value']"

     function field_youtube_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $element['value'] = array( '#type' => 'textfield', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, ); return $element; } 

    Измените форму своего виджетов на:

     function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { switch ($instance['widget']['type']) { case 'youtubefield_video_widget': $element['youtubefield_video'] = array( '#type' => 'textfield', '#title' => $element['#title'], '#description' => $element['#description'], '#default_value' => isset($items[$delta]['youtubefield_video']) ? $items[$delta]['youtubefield_video'] : NULL, '#required' => $element['#required'], '#weight' => isset($element['#weight']) ? $element['#weight'] : 0, '#delta' => $delta, ); break; } return $element; }