I created a custom field as in field_example described, using text_format as type and it shows up a multi line editor without any problems.
But I'm facing a mysql error when trying to save a node:
messagePDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1: INSERT INTO {field_data_field_test3} (entity_type, entity_id, revision_id, bundle, delta, language, field_test3_additional_info) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6_value, :db_insert_placeholder_6_format); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 12 [:db_insert_placeholder_2] => 12 [:db_insert_placeholder_3] => article [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6_value] => test [:db_insert_placeholder_6_format] => filtered_html ) in field_sql_storage_field_storage_write() (line 451 of /var/www/demo/site/modules/field/modules/field_sql_storage/field_sql_storage.module).
I have the following files: si_media.install:
<?php /** * Implements hook_field_schema(). */ function si_media_field_schema($field) { $columns = array( 'additional_info' => array( 'type' => 'text', 'not null' => FALSE ), ); $indexes = array( //'additional_info' => array('additional_info'), ); return array( 'columns' => $columns, 'indexes' => $indexes, ); } and si_media.module:
<?php /** * Implements hook_field_info(). */ function si_media_field_info() { return array( // We name our field as the associative name of the array. 'si_media_additional_info' => array( 'label' => t('Additional Informations'), 'description' => t('Adds more informations to a media field.'), 'default_widget' => 'si_media_text', 'default_formatter' => 'si_media_simple_text', ), ); } /** * Implements hook_field_validate(). */ function si_media_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { foreach ($items as $delta => $item) { if (!empty($item['additional_info'])) { /*if (! preg_match('@^#[0-9a-f]{6}$@', $item['additional_info'])) { $errors[$field['field_name']][$langcode][$delta][] = array( 'error' => 'si_media_invalid', 'message' => t('Color must be in the HTML format #abcdef.'), ); }*/ } } } /** * Implements hook_field_is_empty(). */ function si_media_field_is_empty($item, $field) { return empty($item['additional_info']); } /** * Implements hook_field_formatter_info(). */ function si_media_field_formatter_info() { return array( // This formatter just displays the hex value in the color indicated. 'si_media_simple_text' => array( 'label' => t('Default output'), 'field types' => array('si_media_additional_info'), ), ); } /** * Implements hook_field_formatter_view(). */ function si_media_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { $element = array(); switch ($display['type']) { // This formatter simply outputs the field as text and with a color. case 'si_media_simple_text': foreach ($items as $delta => $item) { $element[$delta] = array( // We create a render array to produce the desired markup, // "<p style="color: #hexcolor">The color code ... #hexcolor</p>". // See theme_html_tag(). '#type' => 'html_tag', '#tag' => 'p', '#attributes' => array( 'style' => 'color: ' . $item['additional_info'], ), '#value' => t('The color code in this field is @code', array('@code' => $item['additional_info'])), ); } break; } return $element; } /** * Implements hook_field_widget_info(). */ function si_media_field_widget_info() { return array( 'si_media_text' => array( 'label' => t('Text area (multiple rows)'), 'field types' => array('si_media_additional_info'), ), ); } /** * Implements hook_field_widget_form(). */ function si_media_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $value = isset($items[$delta]['additional_info']) ? $items[$delta]['additional_info'] : ''; $widget = $element; $widget['#delta'] = $delta; switch ($instance['widget']['type']) { case 'si_media_text': $widget += array( '#type' => 'text_format', '#default_value' => $value, ); break; } $element['additional_info'] = $widget; return $element; } /** * Implements hook_field_widget_error(). */ function si_media_field_widget_error($element, $error, $form, &$form_state) { switch ($error['error']) { case 'si_media_invalid': form_error($element, $error['message']); break; } } I don't get it, why there is this error coming.