[gelöst] Form API Collapse-Status eines Fieldsets auslesen?
am 02.08.2010 - 16:42 Uhr in
Hey Leute, habe mal wieder ein kleines Problem -,-'
Und zwar folgendes:
Ich habe mir mittels der Form API ein Formular erstellt, welches mehrere Fieldsets beinhaltet.
Und zwar ein "großes" Fieldset, auf dem alle anderen Elemente untergebracht sind und 3 kleine Fieldsets - das erste enthält einige Checkboxen, das zweite ein Textfeld und das Dritte ein Datei-Feld.
Die drei "kleinen" Fieldsets wurden alle auf Collapsed gesetzt, dass heißt, sie sind zusammengeklappt.
Nun habe ich es über Multistep so eingerichtet, dass man über einen Button weitere Text- oder Dateifelder hinzufügen kann. Das heißt, man klickt den Button und danach hat das 2. kleine Fieldset z.B. 2 Textfelder, statt eins.
Das klappt soweit auch alles wunderbar. Aber durch das Multistep-Verfahren wird das Formular neu geladen - somit sind alle Fieldsets wieder im Ausgangszustand, also "Collapsed", zusammengeklappt.
Ich hätte aber gern, dass die Fieldsets nach dem neu Laden des Formulars so sind, wie zuvor. Wenn man vorher also das erste und dritte Fieldset aufgeklappt hatte, dann sollen diese Fieldsets auch nach dem rebuild noch aufgeklappt sein.
Kennt jemand eine Möglichkeit, dies zu bewerkstelligen?
Ich weiß bisher, dass zusammengeklappte Fieldsets die Klasse "collapsible collapsed" haben und aufgeklappte bekommen per JS die Klasse "collapsible" zugewiesen. Wenn ich also die momentane Klasse dieser Fieldsets in der Submit-Funktion auslesen könnte, wäre das alles kein Problem.
Nur... gibt es eine Möglichkeit, diese Klasse in Erfahrung zu bringen? Wenn ja, wie?
Oder kennt jemand eine andere Möglichkeit?
- Anmelden oder Registrieren um Kommentare zu schreiben
Hat keiner eine Idee, wie man
am 07.08.2010 - 17:03 Uhr
Hat keiner eine Idee, wie man das machen könnte?
Der klassische Fall, daß der
am 08.08.2010 - 11:17 Uhr
Der klassische Fall, daß der Server nicht mitbekommt, was auf dem Client passiert. Ich würde Hidden-Fields in die Form einbauen und mittels jQuery/JavaScript über den Event des Clicken des Fieldsets diese Felder auf "Auf" oder "Zu" setzen. Nach dem Submit kannst Du dann den Zustand der Felder auswerten.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Dachte mir schon, dass das
am 08.08.2010 - 17:30 Uhr
Dachte mir schon, dass das ganze auf jQuery hinauslaufen würde, da bin ich leider (noch) nicht ganz so fit...
Aber ich habe mir das mal ein wenig angeschaut und ein kleines Test-Formular gebaut, welches ich mit diesem JS ändere:
<?php
(function($) {
$(document).ready(function() {
$('#edit-start').click(ausblenden);
function ausblenden()
{
var status = $('#edit-test-1').val();
if (status == 'show')
{
$('#edit-test-2').hide(250);
$('#edit-test-1').val('hide');
}
else
{
$('#edit-test-2').show(250);
$('#edit-test-1').val('show');
}
}
?>
Ist nur ein kleiner Test, die IDs "edit-start", "edit-test-1" und "edit-test-2" sind alles Text-Felder. Feld 1 hat als Standardwert "show" und wenn ich nun auf das Feld "start" klicke, wird Feld 2 ausgeblendet und Feld 1 bekommt den Wert "hide". Nach einem weiteren Klick taucht Feld 2 wieder auf. Super, das klappt genau so, wie es für diesen Test gedacht war.
Aber das Problem ist folgendes:
Feld 1 ist sichtbar --> doof
Ich würde gern den Wert ("show" bzw. "hide") in einem nicht sichtbaren Feld unterbringen (wie bereits von dir vorgeschlagen, wla).
Also habe ich folgende Formular-Elemente versucht:
<?php
// normales Textfeld, welches über '#access' ausgeblendet wurde
$form['test_1'] = array(
'#type' => 'textfield',
'#title' => 'Test-Feld 1',
'#size' => 70,
'#default_value' => 'show',
'#access' => FALSE,
);
//Value-Element, welches ohnehin nicht sichtbar ist
$form['test_value'] = array(
'#type' => 'value',
'#value' => 'show',
);
?>
Beide Elemente kann ich nicht über jQuery auslesen. Die beiden Elemente tauchen auch nicht im Firebug auf. Wenn ich diese Form-Elemente verwende ergibt $('#edit-test-1').val(); bzw. $('#edit-test-value').val(); einfach gar nichts.
Ich habe es momentan hinbekommen, indem ich ein Textfeld genommen und um dieses Textfeld mittels #prefix und #suffix einen div mit display: none gebaut habe.
Aber gibt es noch einen eleganteren Weg, um diese Info ("show" bzw. "hide") unsichtbar im Formular unterzubringen? Das Value-Element wäre dafür ja super geeignet, aber dieses kann ich eben nicht auslesen. Oder mache ich da was falsch?
Wenn der Wert eines Feldes zu
am 08.08.2010 - 18:35 Uhr
Wenn der Wert eines Feldes zu ändern sein soll, mußt Du das default_value nehmen. Außerdem gibt es für ein Form-Item die Option hidden:
$form['test_1'] = array(
'#type' => 'hidden',
'#title' => 'Test-Feld 1',
'#default_value' => 'show',
);
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Na hoppla, der Type "hidden"
am 08.08.2010 - 21:42 Uhr
Na hoppla, der Type "hidden" ist mir noch nie aufgefallen, kannte immer nur "value" :-p
Super, mit "hidden" funktioniert das, was mit "value" nicht geklappt hat, danke :-) Jetzt klappt alles so, wie's soll und die Fieldsets bleiben bei einen Multistep-Reload geöffnet (bzw. geschlossen, je nachdem).