[gelöst]Erster Wert von Auswahlfeldern in Formular

am 20.09.2012 - 07:53 Uhr in
Hallo,
ich habe ein Problem mit einem checkbox-Element in meinem Formular. Die Auswahl von mehreren Werten klappt soweit, allerdings bereitet mir der erste Wert gehörige Probleme. Er wird weder in die Datenbank übernommen (bzw. immer übernommen), noch bleibt er gecheckt, falls ein Fehler im Formular auftritt. Alle anderen Werte zeigen die korrekte Funktionalität. Meine bisherigen Versuche sehen folgendermaßen aus:
<?php
...
# Wert wird immer in die DB geschrieben, egal ob gewählt oder nicht
if ($form_state['values']['moduletype'][0] == 0) {
$node->field_modultyp[0]['value'] = $form['moduletype_options']['#value'][0];
}
...
?>
<?php
# Wert wird nie in die DB übernommen
if ($form_state['values']['moduletype'][0] != null) {
$node->field_modultyp[0]['value'] = $form['moduletype_options']['#value'][0];
}
?>
Die zugehörige Formularerstellung:
<?php
$form['moduletype_options'] = array(
'#type' => 'value',
'#value' => array(
'Recommendation',
'Newsletter',
'Pricing',
'Assortment Planning',
'Data Cleansing',
'Scoring',
),
);
$form['instance']['moduletype'] = array(
'#title' => 'Modultyp',
'#type' => 'checkboxes',
'#description' => 'Modultyp(en)',
'#options' => $form['moduletype_options']['#value'],
);
?>
Danke und viele Grüße
- Anmelden oder Registrieren um Kommentare zu schreiben
Versuch mal
am 22.09.2012 - 22:45 Uhr
http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#default_value
Ausserdem würde ich das Array direkt bilden und nicht unbedingt als $form Element.
Gruss
abc123
Die Lösung
am 24.09.2012 - 07:57 Uhr
Hallo,
danke für die Hinweise. Habe jetzt eine funktionierende Lösung, die gleichzeitig beide Probleme löst. Zum einen habe ich das Optionen-Array tatsächlich dem Tip zufolge normal erzeugt,
<?php
...
$moduletypes = array(
'Recommendation' => 'Recommendation',
'Newsletter' => 'Newsletter',
'Pricing' => 'Pricing',
'Assortment Planning' => 'Assortment Planning',
'Data Cleansing' => 'Data Cleansing',
'Scoring' => 'Scoring',
);
$form['instance']['moduletype'] = array(
'#title' => 'Modultyp',
'#type' => 'checkboxes',
'#description' => 'Modultyp(en)',
'#options' => $moduletypes,
);
...
?>
und habe ich es gleichzeitig zu einem assoziativem gemacht. Danach habe ich mir mit dem devel-Modul mal das genaue array ($form_state['values']) anzeigen lassen.
Das Prüfen und Einfügen läuft jetzt folgendermaßen ab, wobei ich nochmal genau geschaut habe, wie Drupal die Einträge in der content_field_modultyp-Tabelle hinterlegt, da hatte ich auch noch einen Fehler:
<?php
...
# checkboxes
$temp = 0;
if (is_string($form_state['values']['moduletype']['Recommendation'])) {
$node->field_modultyp[$temp]['value'] = $form_state['values']['moduletype']['Recommendation'];
$temp++;
}
if (is_string($form_state['values']['moduletype']['Newsletter'])) {
$node->field_modultyp[$temp]['value'] = $form_state['values']['moduletype']['Newsletter'];
$temp++;
}
...
?>
Danke und viele Grüße