Index: modules/field/field.api.php =================================================================== RCS file: /cvs/drupal/drupal/modules/field/field.api.php,v retrieving revision 1.46 diff -u -p -r1.46 field.api.php --- modules/field/field.api.php 23 Oct 2009 22:24:13 -0000 1.46 +++ modules/field/field.api.php 28 Oct 2009 13:08:38 -0000 @@ -632,11 +632,15 @@ function hook_field_widget_info_alter(&$ * Array of default values for this field. * @param $delta * The order of this item in the array of subelements (0, 1, 2, etc). + * @param $element + * A form element array containing basic properties for the widget: #title, + * #description, #required, #field, #field_instance, #field_name, #delta, + * #columns. * @return * The form item for a single element for this field. */ -function hook_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function hook_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : '', ); Index: modules/field/field.form.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/field/field.form.inc,v retrieving revision 1.29 diff -u -p -r1.29 field.form.inc --- modules/field/field.form.inc 15 Oct 2009 12:44:34 -0000 1.29 +++ modules/field/field.form.inc 28 Oct 2009 12:45:26 -0000 @@ -57,18 +57,19 @@ function field_default_form($obj_type, $ $delta = isset($get_delta) ? $get_delta : 0; $function = $instance['widget']['module'] . '_field_widget'; if (function_exists($function)) { - if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { - $defaults = array( - '#required' => $get_delta > 0 ? FALSE : $instance['required'], - '#columns' => array_keys($field['columns']), - '#title' => check_plain(t($instance['label'])), - '#description' => field_filter_xss($instance['description']), - '#delta' => $delta, - '#field_name' => $field['field_name'], - '#bundle' => $instance['bundle'], - '#object_type' => $instance['object_type'], - ); - $element = array_merge($element, $defaults); + $element = array( + '#title' => check_plain(t($instance['label'])), + '#description' => field_filter_xss($instance['description']), + '#required' => $get_delta > 0 ? FALSE : $instance['required'], + '#field' => $field, + '#field_instance' => $instance, + '#field_name' => $field['field_name'], + // @todo #delta cannot be rebuilt by the widget, but #columns is + // contained in #field. + '#delta' => $delta, + '#columns' => array_keys($field['columns']), + ); + if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { // If we're processing a specific delta value for a field where the // field module handles multiples, set the delta in the result. // For fields that handle their own processing, we can't make assumptions @@ -84,14 +85,6 @@ function field_default_form($obj_type, $ } if ($form_element) { - $defaults = array( - '#field_name' => $field['field_name'], - '#tree' => TRUE, - '#weight' => $instance['widget']['weight'], - ); - - $form_element = array_merge($form_element, $defaults); - // Add the field form element as a child keyed by language code to match the // field data structure: $object->{$field_name}[$langcode][$delta][$column]. // The '#language' key can be used to access the field's form element when @@ -99,7 +92,7 @@ function field_default_form($obj_type, $ // form element. $addition[$field['field_name']] = array( '#tree' => TRUE, - '#weight' => $form_element['#weight'], + '#weight' => $instance['widget']['weight'], '#language' => $langcode, $langcode => $form_element, ); @@ -153,26 +146,29 @@ function field_multiple_value_form($fiel '#prefix' => '
', '#suffix' => '
', '#max_delta' => $max, + '#field_name' => $field['field_name'], ); $function = $instance['widget']['module'] . '_field_widget'; if (function_exists($function)) { for ($delta = 0; $delta <= $max; $delta++) { - if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { - $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; - $defaults = array( - // For multiple fields, title and description are handled by the wrapping table. - '#title' => $multiple ? '' : $title, - '#description' => $multiple ? '' : $description, - '#required' => $delta == 0 && $instance['required'], - '#weight' => $delta, - '#delta' => $delta, - '#columns' => array_keys($field['columns']), - '#field_name' => $field_name, - '#object_type' => $instance['object_type'], - '#bundle' => $instance['bundle'], - ); - + $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; + $element = array( + // For multiple fields, title and description are handled by the wrapping table. + '#title' => $multiple ? '' : $title, + '#description' => $multiple ? '' : $description, + // Only the first widget should be required. + '#required' => $delta == 0 && $instance['required'], + '#weight' => $delta, + '#field' => $field, + '#field_instance' => $instance, + '#field_name' => $field_name, + // @todo #delta cannot be rebuilt by the widget, but #columns is + // contained in #field. + '#delta' => $delta, + '#columns' => array_keys($field['columns']), + ); + if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { // Input field for the delta (drag-n-drop reordering). if ($multiple) { // We name the element '_weight' to avoid clashing with elements @@ -185,14 +181,12 @@ function field_multiple_value_form($fiel '#weight' => 100, ); } - - $form_element[$delta] = array_merge($element, $defaults); + $form_element[$delta] = $element; } } // Add 'add more' button, if not working with a programmed form. if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED && empty($form_state['programmed'])) { - $form_element[$field_name . '_add_more'] = array( '#type' => 'submit', '#name' => $field_name . '_add_more', Index: modules/field/modules/number/number.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/number/number.module,v retrieving revision 1.23 diff -u -p -r1.23 number.module --- modules/field/modules/number/number.module 23 Oct 2009 22:24:13 -0000 1.23 +++ modules/field/modules/number/number.module 28 Oct 2009 12:39:49 -0000 @@ -252,8 +252,8 @@ function theme_field_formatter_number_un */ function theme_field_formatter_number($variables) { $element = $variables['element']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $value = $element['#item']['value']; $settings = $element['#settings']; $formatter_type = $element['#formatter']; @@ -313,37 +313,9 @@ function number_element_info() { /** * Implement hook_field_widget(). - * - * Attach a single form element to the form. It will be built out and - * validated in the callback(s) listed in hook_element_info(). We build it - * out in the callbacks rather than here in hook_widget so it can be - * plugged into any module that can provide it with valid - * $field information. - * - * Field module will set the weight, field name and delta values - * for each form element. - * - * If there are multiple values for this field, the Field module will - * call this function as many times as needed. - * - * @param $form - * the entire form array, $form['#node'] holds node information - * @param $form_state - * the form_state, $form_state['values'] holds the form values. - * @param $field - * The field structure. - * @param $instance - * the field instance array - * @param $langcode - * The language associated to $items. - * @param $delta - * the order of this item in the array of subelements (0, 1, 2, etc) - * - * @return - * the form item for a single element for this field */ -function number_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function number_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : NULL, ); @@ -367,9 +339,9 @@ function number_field_widget_error($elem */ function number_elements_process($element, $form_state, $form) { $field_name = $element['#field_name']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); - $field_key = $element['#columns'][0]; + $field = $element['#field']; + $instance = $element['#field_instance']; + $field_key = $element['#columns'][0]; $value = isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : ''; if ($field['type'] == 'number_decimal') { @@ -389,9 +361,9 @@ function number_elements_process($elemen '#title' => $element['#title'], '#description' => $element['#description'], '#required' => $element['#required'], + '#field' => $element['#field'], + '#field_instance' => $element['#field_instance'], '#field_name' => $element['#field_name'], - '#object_type' => $element['#object_type'], - '#bundle' => $element['#bundle'], '#delta' => $element['#delta'], '#columns' => $element['#columns'], ); @@ -428,8 +400,8 @@ function number_elements_process($elemen * FAPI validation of an individual float element. */ function number_float_validate($element, &$form_state) { - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; $value = $element['#value'][$field_key]; @@ -450,8 +422,8 @@ function number_float_validate($element, * FAPI validation of an individual integer element. */ function number_integer_validate($element, &$form_state) { - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; $value = $element['#value'][$field_key]; @@ -472,8 +444,8 @@ function number_integer_validate($elemen * FAPI validation of an individual decimal element. */ function number_decimal_validate($element, &$form_state) { - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; $value = $element['#value'][$field_key]; Index: modules/field/modules/options/options.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/options/options.module,v retrieving revision 1.14 diff -u -p -r1.14 options.module --- modules/field/modules/options/options.module 23 Oct 2009 22:24:13 -0000 1.14 +++ modules/field/modules/options/options.module 28 Oct 2009 12:48:56 -0000 @@ -94,8 +94,8 @@ function options_element_info() { /** * Implement hook_field_widget(). */ -function options_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = NULL) { - $element = array( +function options_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => !empty($items) ? $items : array(), ); @@ -119,9 +119,9 @@ function options_field_widget_error($ele * The $field and $instance arrays are in $form['#fields'][$element['#field_name']]. */ function options_buttons_elements_process($element, &$form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; - $field_key = $element['#columns'][0]; + $field = $element['#field']; + $instance = $element['#field_instance']; + $field_key = $element['#columns'][0]; // See if this element is in the database format or the transformed format, // and transform it if necessary. @@ -183,9 +183,9 @@ function options_buttons_elements_proces * The $field and $instance arrays are in $form['#fields'][$element['#field_name']]. */ function options_select_elements_process($element, &$form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; - $field_key = $element['#columns'][0]; + $field = $element['#field']; + $instance = $element['#field_instance']; + $field_key = $element['#columns'][0]; // See if this element is in the database format or the transformed format, // and transform it if necessary. @@ -224,9 +224,9 @@ function options_select_elements_process * note that $element['#value'] is already set. */ function options_onoff_elements_process($element, &$form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; - $field_key = $element['#columns'][0]; + $field = $element['#field']; + $instance = $element['#field_instance']; + $field_key = $element['#columns'][0]; // See if this element is in the database format or the transformed format, // and transform it if necessary. @@ -289,9 +289,9 @@ function options_validate($element, &$fo * transformation is needed. */ function options_data2form($element, $items, $field) { - $field_key = $element['#columns'][0]; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; + $field_key = $element['#columns'][0]; $options = options_options($field, $instance); $items_transposed = options_transpose_array_rows_cols($items); @@ -317,9 +317,9 @@ function options_data2form($element, $it * transformation is needed. */ function options_form2data($element, $field) { + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); $items = (array) $element[$field_key]['#value']; $options = options_options($field, $instance); Index: modules/field/modules/text/text.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v retrieving revision 1.34 diff -u -p -r1.34 text.module --- modules/field/modules/text/text.module 23 Oct 2009 22:24:13 -0000 1.34 +++ modules/field/modules/text/text.module 28 Oct 2009 12:52:15 -0000 @@ -317,8 +317,8 @@ function theme_field_formatter_text_plai */ function theme_field_formatter_text_trimmed($variables) { $element = $variables['element']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL); } @@ -330,8 +330,8 @@ function theme_field_formatter_text_trim */ function theme_field_formatter_text_summary_or_trimmed($variables) { $element = $variables['element']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; if (!empty($element['#item']['safe_summary'])) { return $element['#item']['safe_summary']; @@ -563,40 +563,9 @@ function text_element_info() { /** * Implement hook_field_widget(). - * - * Attach a single form element to the form. It will be built out and - * validated in the callback(s) listed in hook_element_info(). We build it - * out in the callbacks rather than here in hook_field_widget so it can be - * plugged into any module that can provide it with valid - * $field information. - * - * Field module will set the weight, field name and delta values - * for each form element. - * - * If there are multiple values for this field, the field module will - * call this function as many times as needed. - * - * @param $form - * the entire form array, $form['#node'] holds node information - * @param $form_state - * the form_state, $form_state['values'][$field['field_name']] - * holds the field's form values. - * @param $field - * The field structure. - * @param $instance - * the field instance array - * @param $langcode - * The language associated to $items. - * @param $items - * array of default values for this field - * @param $delta - * the order of this item in the array of subelements (0, 1, 2, etc) - * - * @return - * the form item for a single element for this field */ -function text_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function text_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : '', ); @@ -638,8 +607,8 @@ function text_field_widget_error($elemen * extracted in hook_field_widget() above. */ function text_textfield_elements_process($element, $form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; $delta = $element['#delta']; @@ -674,8 +643,8 @@ function text_textfield_elements_process * The $field and $instance arrays are in $form['#fields'][$element['#field_name']]. */ function text_textarea_elements_process($element, $form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; + $field = $element['#field']; + $instance = $element['#field_instance']; $field_key = $element['#columns'][0]; $delta = $element['#delta']; @@ -707,8 +676,8 @@ function text_textarea_elements_process( * The $field and $instance arrays are in $form['#fields'][$element['#field_name']]. */ function text_textarea_with_summary_process($element, $form_state, $form) { - $field = $form['#fields'][$element['#field_name']]['field']; - $instance = $form['#fields'][$element['#field_name']]['instance']; + $field = $element['#field']; + $instance = $element['#field_instance']; $delta = $element['#delta']; $field_key = $element['#columns'][1]; @@ -721,7 +690,6 @@ function text_textarea_with_summary_proc '#weight' => 0, '#title' => t('Summary'), '#description' => t('Leave blank to use trimmed value of full text as the summary.'), - '#required' => $element['#required'], '#display' => $display, '#attached' => array('js' => array(drupal_get_path('module', 'text') . '/text.js')), '#attributes' => array('class' => array('text-textarea-summary')), @@ -738,7 +706,6 @@ function text_textarea_with_summary_proc '#title' => $display ? t('Full text') : $element['#title'], '#description' => $element['#description'], '#required' => $element['#required'], - '#required' => $instance['required'], '#attributes' => array('class' => array('text-full-textarea')), '#prefix' => '
', '#suffix' => '
', Index: modules/file/file.field.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/file/file.field.inc,v retrieving revision 1.7 diff -u -p -r1.7 file.field.inc --- modules/file/file.field.inc 15 Oct 2009 12:44:36 -0000 1.7 +++ modules/file/file.field.inc 28 Oct 2009 13:01:05 -0000 @@ -429,7 +429,7 @@ function file_field_widget_settings_form /** * Implementation of hook_field_widget(). */ -function file_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { +function file_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $form['#attributes'] = array('enctype' => 'multipart/form-data'); $defaults = array( @@ -461,27 +461,21 @@ function file_field_widget(&$form, &$for // Essentially we use the managed_file type, extended with some enhancements. $element_info = element_info('managed_file'); - $element = array( + $element += array( '#type' => 'managed_file', '#default_value' => isset($items[$delta]) ? $items[$delta] : $defaults, - '#required' => $instance['required'], '#upload_location' => file_field_widget_uri($field, $instance), '#upload_validators' => file_field_widget_upload_validators($field, $instance), '#value_callback' => 'file_field_widget_value', '#process' => array_merge($element_info['#process'], array('file_field_widget_process')), // Allows this field to return an array instead of a single value. '#extended' => TRUE, - // Add extra Field properties. - '#field_name' => $field['field_name'], - '#bundle' => $instance['bundle'], - '#object_type' => $instance['object_type'], ); if ($field['cardinality'] == 1) { // If there's only one field, return it as delta 0. - $element['#title'] = $instance['label']; if (empty($element['#default_value']['fid'])) { - $element['#description'] = theme('file_upload_help', array('description' => $instance['description'], 'upload_validators' => $element['#upload_validators'])); + $element['#description'] = theme('file_upload_help', array('description' => $element['#description'], 'upload_validators' => $element['#upload_validators'])); } $elements = array($element); } @@ -499,7 +493,7 @@ function file_field_widget(&$form, &$for $elements[$delta] = $element; $elements[$delta]['#default_value'] = $defaults; $elements[$delta]['#weight'] = $delta; - $elements[$delta]['#required'] = ($instance['required'] && $delta == 0); + $elements[$delta]['#required'] = ($element['#required'] && $delta == 0); } // The group of elements all-together need some extra functionality // after building up the full list (like draggable table rows). @@ -508,8 +502,11 @@ function file_field_widget(&$form, &$for $elements['#theme_wrappers'] = array('fieldset'); $elements['#attributes']['class'] = array('file-widget'); $elements['#process'] = array('file_field_widget_process_multiple'); - $elements['#title'] = $instance['label']; - $elements['#description'] = $instance['description']; + $elements['#title'] = $element['#title']; + $elements['#description'] = $element['#description']; + $elements['#field'] = $element['#field']; + $elements['#field_instance'] = $element['#field_instance']; + $elements['#field_name'] = $element['#field_name']; // Add some properties that will eventually be added to the file upload // field. These are added here so that they may be referenced easily through @@ -577,7 +574,7 @@ function file_field_widget_value($elemen if ($input) { // Checkboxes lose their value when empty. // If the display field is present make sure its unchecked value is saved. - $field = field_info_field($element['#field_name']); + $field = $element['#field']; if (empty($input['display'])) { $input['display'] = $field['settings']['display_field'] ? 0 : 1; } @@ -605,8 +602,8 @@ function file_field_widget_process($elem $item = $element['#value']; $item['fid'] = $element['fid']['#value']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $settings = $instance['widget']['settings']; $element['#theme'] = 'file_widget'; @@ -717,8 +714,8 @@ function theme_file_widget($variables) { function theme_file_widget_multiple($variables) { $element = $variables['element']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; // Get our list of widgets in order. $widgets = array(); Index: modules/image/image.field.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/image/image.field.inc,v retrieving revision 1.2 diff -u -p -r1.2 image.field.inc --- modules/image/image.field.inc 17 Oct 2009 02:14:52 -0000 1.2 +++ modules/image/image.field.inc 28 Oct 2009 13:01:57 -0000 @@ -305,8 +305,8 @@ function image_field_widget_settings_for /** * Implementation of hook_field_widget(). */ -function image_field_widget(&$form, &$form_state, $field, $instance, $items, $delta = 0) { - $elements = file_field_widget($form, $form_state, $field, $instance, $items, $delta); +function image_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $elements = file_field_widget($form, $form_state, $field, $instance, $langcode, $items, $delta, $element); $settings = $instance['settings']; foreach (element_children($elements) as $delta) { @@ -346,8 +346,8 @@ function image_field_widget_process($ele $item = $element['#value']; $item['fid'] = $element['fid']['#value']; - $field = field_info_field($element['#field_name']); - $instance = field_info_instance($element['#object_type'], $element['#field_name'], $element['#bundle']); + $field = $element['#field']; + $instance = $element['#field_instance']; $settings = $instance['settings']; $widget_settings = $instance['widget']['settings']; Index: modules/simpletest/tests/field_test.module =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/field_test.module,v retrieving revision 1.35 diff -u -p -r1.35 field_test.module --- modules/simpletest/tests/field_test.module 24 Oct 2009 17:02:51 -0000 1.35 +++ modules/simpletest/tests/field_test.module 28 Oct 2009 13:03:52 -0000 @@ -489,40 +489,12 @@ function field_test_field_widget_info() /** * Implement hook_field_widget(). - * - * Attach a single form element to the form. It will be built out and - * validated in the callback(s) listed in hook_element_info(). We build it - * out in the callbacks rather than here in hook_widget so it can be - * plugged into any module that can provide it with valid - * $field information. - * - * If there are multiple values for this field, the field module will - * call this function as many times as needed. - * - * @param $form - * the entire form array, $form['#node'] holds node information - * @param $form_state - * the form_state, $form_state['values'][$field['field_name']] - * holds the field's form values. - * @param $field - * The field structure. - * @param $instance - * the instance array - * @param $items - * array of default values for this field - * @param $delta - * the order of this item in the array of subelements (0, 1, 2, etc) - * - * @return - * the form item for a single element for this field */ -function field_test_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { +function field_test_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $element = array( - 'value' => array( - '#title' => $instance['label'], + 'value' => $element + array( '#type' => 'textfield', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : '', - '#required' => $instance['required'], ), ); return $element; Index: modules/taxonomy/taxonomy.module =================================================================== RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v retrieving revision 1.530 diff -u -p -r1.530 taxonomy.module --- modules/taxonomy/taxonomy.module 24 Oct 2009 05:13:44 -0000 1.530 +++ modules/taxonomy/taxonomy.module 28 Oct 2009 13:07:09 -0000 @@ -1211,8 +1211,8 @@ function taxonomy_term_title($term) { /** * Implement hook_field_widget(). */ -function taxonomy_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = NULL) { - $element = array( +function taxonomy_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => !empty($items) ? $items : array(), );