Полевой API не сохраняет данные
Я просмотрел несколько учебных пособий и не знаю, чего мне не хватает.
Я создал новый тип поля с помощью API полей, и он отлично отображает все, но когда я пытаюсь поместить информацию в текстовое поле и нажимаю сохранить, после отправки в форме ничего не отображается и ничего не помещается в базу данных.
Кто-нибудь может сказать мне, чего мне не хватает? Вот пример кода, который я написал:
В модуле.установите файл i имейте:
function cptc_test_field_schema($field) {
$columns = array(
'field_test' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => FALSE,
),
);
return array('columns' => $columns);
}
И в файле module.module я поставил
function cptc_test_field_info(){
return array(
'field_test'=> array(
'label' => 'test',
'description' => 'test crap',
'default_widget' => 'widget_test',
'default_formatter' => 'formatter_test',
),
);
}
function cptc_test_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$value = isset($items[$delta]['value']) ? $items[$delta]['value'] : '';
switch($instance['widget']['type']){
case 'widget_test':
$element['widget_test'] = $element + array(
'#title' => 'Additional Email Addresses',
'#type' => 'textfield',
'#default_value' => '',
'#size' => 60,
);
break;
default:
break;
}
$element['#element_validate'][] = 'cptc_test_field_widget_validate';
return $element;
}
В этом есть еще много чего (очевидно), но я решил, что не должен публиковать все - ради целесообразности. Другие крючки, которые я реализовал, следующие:
hook_field_is_empty
hook_field_validate
hook_field_widget_error
hook_test_field_widget_info
hook_test_field_widget_validate
hook_test_field_formatter_info
hook_test_field_formatter_view
Заранее спасибо!
2 answers
В вашей функции cptc_test_field_widget_form()
измените
$element['widget_test']
до $element['field_test']
. и убедитесь, что ваш hook_field_is_empty()
содержит следующую строку кода:
return empty($item['field_test']);
Моя первая мысль, глядя на это, заключается в том, что ваш виджет определяет текстовое поле размером 60, но ваша база данных предназначена только для хранения целого числа.