error div (Pflichtfeld) wird bei Checkbox nicht gesetzt?

am 05.04.2011 - 21:54 Uhr in
Hallo Freunde,
wenn man versucht, eine Node-Add-Form, mit nichtausgefüllten Pflichtfeldern, zu speichern, bekommt man eine Fehlermeldung angezeigt, und, die Pflichtfelder erhalten von Drupal ein error-Div verpasst, sodass das Feld hervorgehoben/markiert ist.
Wenn das Pflichtfeld allerdings ein CCK-Textfeld als Checkbox ist, wird dieses error-Div nicht gesetzt. Ist das CCK-Feld ein normales Textfeld oder ein Radio-Button, wird das Error-Div korrekt gesetzt - nur bei der Checkbox nicht.
Weiß zufällig jemand warum das so ist?
Das Problem ist ... "Vertical Tabs" überprüft jedes Feld nach diesem "error-Div" und zeigt gegebenenfalls den richtigen Tab an in dem das vergessene Pflichtfeld vorhanden ist, sodass der User sofort weiß wo er das Feld finden kann.
Wenn jetzt aber eine Checkbox als Pflichtfeld angegeben wurde, wird das error-div nicht gesetzt und Vertical Tabs kann den richtigen Tab nicht anzeigen, sodass der User durch alle Tabs durch muss um das Pflichtfeld finden zu können.
Wüsste hier eventuell jemand wie man dieses Problem gelöst bekommt?
Danke schonmal und schöne Grüße
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben
Siehe
am 05.04.2011 - 22:51 Uhr
Siehe http://drupal.org/project/checkbox_validate
Hallo Tobias, Mensch - danke
am 05.04.2011 - 23:31 Uhr
Hallo Tobias,
Mensch - danke vielmals für den Hinweis auf das Modul. Ich suche hier seit über einer Stunde und ich buddelte mich gerade durch einen Thread mit 200(!) Beiträgen auf drupal.org. Puhhh ... und ein Modul wurde nirgends erwähnt und ich dachte, dass man das Problem mit "einer Zeile Code" selbst fixen muss ...
"Wenn man denkt es geht nichts mehr, kommt Tobias mit nem spitzen Modul-Tip daher" ;-)
Herzlichen Dank und schönen Abend noch
Matthias
Tja - das Modul ist leider
am 06.04.2011 - 01:11 Uhr
Tja - das Modul ist leider doch nicht das Richtige.
Bei meinen Checkboxes war auch vorher schon
<span class="form-required" title="Dieses Feld wird benötigt.">*</span>
vorhanden. Das "form-required" ist fehlerfrei verfügbar - auch ohne Modul.
Mir geht es um das div-tag "error" - dieser div-tag wird von Drupal gesetzt wenn ein Pflichtfeld nicht ausgefüllt wurde und der User versucht das Add-Form zu speichern. Nach dem Speicherversucht wird das error-tag eingefügt class="form-radio error"
z.B.
<input type="radio" class="form-radio error" value="Kosten angeben" name="field_1_kosten1[value]" id="edit-field-1-kosten1-value-Kosten-angeben">
Wie oben erwähnt - wenn das CCK-Feld ein normales Textfeld oder ein Radio-Button ist, wird, nach dem Speichern (ohne alle Pflichtfelder auszufüllen), dieser error-tag gesetzt, handelt es sich aber um ein Checkbox-Pflichtfeld, wird dieser tag nicht gesetzt.
Ich brauche diesen tag aber auch für die Checkbox. Das muss ein bug im Core sein.
Grübel.
normales Text-Input-Feld:
<input type="text" class="form-text required error" id="edit-field-1-adresse-0-city" name="field_1_adresse[0][city]">
normales Text-Input-Feld:
<input type="radio" class="form-radio error" value="Kosten angeben" name="field_1_kosten1[value]" id="edit-field-1-kosten1-value-Kosten-angeben">
Checkbox (da wird kein error-tag gesetzt):
<input type="checkbox" class="form-checkbox" value="Frauen" id="edit-field-1-test-value-Frauen" name="field_1_test[value][Frauen]">
Checkbox Validierung
am 06.04.2011 - 07:39 Uhr
Hallo.
...Das muss ein bug im Core sein...
Nein, defininitv nicht. Eine Checkbox hat exakt 2 gültige Werte: "1" und "0". Diese Werte sind beide gültig, dementsprechend kann eine Prüfung auf Erforderlichkeit per default nicht erkennen, ob Wert "0" gültig ist, oder (wie von Dir gewünscht) bedeutet, dass das Feld nicht gesetzt ist (es ist ja mit dem Wert "0" gesetzt).
[do:checkbox_validate Checkbox validate] ändert dieses Verhalten, indem es einfach festlegt, dass "0" mit "nicht gesetzt" gleichzusetzen ist.
Wenn nun bei fehlgeschlagener Validierung eine zusätzliche Klasse hinzugefügt werden soll, so muss dies das Modul übernehmen. Genauer gesagt die Funktion checkbox_validate_pre_render_checkbox(&$element).
Ergo: Patch für [do:checkbox_validate Checkbox validate] schreiben, der die Klasse hinzufügt und dann als neuen Issue für das Modul einstellen.
Stefan
Hallo Stefan,danke für den
am 06.04.2011 - 13:40 Uhr
Hallo Stefan,
danke für den Hinweis.
Was ich aber nicht verstehe. Warum hat eine Checkbox als Wert "0" und "1" - ein Radio-Button aber scheinbar nicht? Ein Radio-Button kann doch auch Werte haben. Warum ist dann bei einem Radio-Button, wenn der Wert gesetzt wurde nicht "1" und wenn er nicht gesetzt wurde "0"? Beim Radio-Button wird die error-class ja korrekt gesetzt. Den Unterschied verstehe ich momentan nicht wirklich. Grübel.
Ich werde mich jetzt mal mit der Funktion checkbox_validate_pre_render_checkbox(&$element) auseinandersetzen aber mit "Modulen patchen" ist das bei mir so eine Sache. Da habe ich mich noch nicht heran gewagt und große Schwierigkeiten.
Da muss ich nun erstmal schauen wie man überhaupt die input-Felder ansprechen kann .... mal sehen ob ich das hinbekomme.
Trotzdem danke für die Hilfe.
Schöne Grüße
Matthias