php drupal drupal-7 drupal-fields drupal-field-api

php - El campo personalizado de Drupal 7 solo guarda el primer personaje



drupal-7 drupal-fields (3)

Cambie su formulario de widget a:

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; }

Básicamente, estoy tratando de crear mi primer módulo de tipo de campo utilizando la nueva API Drupal 7 Field. Logré que se muestre correctamente en la vista "editar".
Sin embargo, cuando intento guardar algunos datos, solo guarda el primer carácter.

Aquí está el módulo:

<?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''), ), ); }

Y aquí está el instalador:

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

EDITAR: El problema parece estar relacionado con el widget, ya que funciona bien cuando obtiene los datos mediante programación.


Este formulario de widget funcionó para mí:

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; }


Tuve el mismo problema y descubrí que hook_field_widget_form () debe devolver: "$ 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; }