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