Пользовательское поле 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(),
);
}
РЕДАКТИРОВАТЬ: Проблема, похоже, связана с виджетом, так как он отлично работает, когда получает данные программно.
4
3 answers
Эта форма виджета сработала для меня:
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;
}
6
Author: nmc, 2011-06-27 15:22:21
У меня была та же проблема, и для обнаружения функции hook_field_widget_form() необходимо вернуть: "$элемент['значение']"
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;
}
1
Author: Nicolai, 2011-12-03 17:00:37
Измените форму виджета на:
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;
}
0
Author: Nikit, 2011-06-27 01:49:34