Полевой 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

Заранее спасибо!

Author: belvedere, 2011-12-14

2 answers

В вашей функции cptc_test_field_widget_form() измените $element['widget_test'] до $element['field_test']. и убедитесь, что ваш hook_field_is_empty() содержит следующую строку кода:

return empty($item['field_test']);
 3
Author: sotn, 2011-12-18 14:10:43

Моя первая мысль, глядя на это, заключается в том, что ваш виджет определяет текстовое поле размером 60, но ваша база данных предназначена только для хранения целого числа.

 0
Author: Malks, 2011-12-15 01:49:27