2012-09-14 5 views
6

Ich versuche ein benutzerdefiniertes Widget zu erstellen, aber wenn ich abschicke, scheint Drupal keine Daten zu speichern. Wenn Sie hook_field_attach_submit() verwenden, um anzuzeigen, welche Daten ich eingefügt habe, wird es als null aufgeführt.Drupal Feldwidget speichert keine gesendeten Daten

Seltsamerweise, wenn ich das #type zu einem einzelnen Textfeld anstelle eines fieldset ändern, speichert es nur das erste Zeichen der Zeichenfolge, die eingegeben worden ist.

Dies scheint wie ein Validierungsproblem, aber ich bin mir nicht sicher, wie man es einhaken oder das Problem zu debuggen. Wohin kann ich von hier gehen?

<?php 
function guide_field_widget_info(){ 
    dpm("guide_field_widget_info"); 
    return array(
    'guide_text_textfield' => array(
     'label' => t('test Text field'), 
     'field types' => array('text'), 
     'settings' => array('size' => 60), 
     'behaviors' => array(
     'multiple values' => FIELD_BEHAVIOR_CUSTOM, 
     'default value' => FIELD_BEHAVIOR_DEFAULT, 
    ), 
    ) 
); 
} 


function guide_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { 
    $field_name = $instance['field_name']; 
    $required = $element['#required']; 
    $item =& $items[$delta]; 


    $element += array(
     '#type' => 'fieldset', 
    '#title' => t('helloooooooo'), 
    ); 
    $required = $element['#required']; 
    $item =& $items[$delta]; 

    $element['nametest'] = array(
     '#title' => t('Name'), 
     '#type' => 'textfield', 
     '#required' => $required, 
     // use #default_value to prepopulate the element 
     // with the current saved value 
     '#default_value' => isset($item['nametest']) ? $item['nametest'] : '', 
    ); 

    $element['checkme'] = array(
     '#title' => t('Check this box or dont'), 
     '#type' => 'checkbox', 
     '#default_value' => isset($item['checkme']) ? $item['checkme'] : '', 
    ); 

//When changing the above code to have a single field, $value is no longer null but will display the first character of the string. I've pasted the code I used to test beloe 
/* 
    $element+= array(
    '#title' => t('Name'), 
    '#type' => 'textfield', 
    '#default_value' => isset($item['nametest']) ? $item['nametest'] : '', 
); 
*/ 

    return $element; 
} 


//hooking this here is required given that after submit, the value is a multidimensional array, whereas the expected value of text is, well, text :-) 

function guide_field_attach_submit($entity_type, $entity, $form, &$form_state){ 
    dpm($form,"guide_field_attach_submit data"); //shows $form[field_test_field][und][0] [value] as being null 
} 
+0

das erste Zeichen klingt wie ein bekanntes Problem zu speichern. Sehen Sie, ob meine vorherige Antwort für http://stackoverflow.com/questions/6426362/custom-drupal-7-field-only-saves-the-first-character Ihnen helfen wird. – nmc

+0

Kein Würfel. Ich habe den mitgelieferten Code ausprobiert und hatte immer noch das gleiche Ergebnis. – devnill

+0

Haben Sie eine Lösung für dieses Problem gefunden? –

Antwort

2

hook_field_is_empty ist obligatorisch und implementieren sein muss wie folgt vor:

/** 
    * Implements hook_field_is_empty(). 
    */ 

function MODULENAME_field_is_empty($item, $field) { 
    if ($field['type'] == 'FIELDTYPE') { 
    if (empty($item[$field['type']]['YourField'])) { 
     return (TRUE); 
    } 
    } 
    return (FALSE); 
} 
+2

Es ist nicht FIELDNAME_field_is_empty, aber HOOK_field_ist leer wo HOOK ist der Name Ihres Moduls. – sbrattla

Verwandte Themen