Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst] Form API Collapse-Status eines Fieldsets auslesen?

Eingetragen von Exterior (2903)
am 02.08.2010 - 16:42 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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?

‹ Mehrere Filefields in einem eigenen CCK Field Welcher hook um den content zu bearbeiten ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hat keiner eine Idee, wie man

Eingetragen von Exterior (2903)
am 07.08.2010 - 17:03 Uhr

Hat keiner eine Idee, wie man das machen könnte?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der klassische Fall, daß der

Eingetragen von wla (9461)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dachte mir schon, dass das

Eingetragen von Exterior (2903)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn der Wert eines Feldes zu

Eingetragen von wla (9461)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Na hoppla, der Type "hidden"

Eingetragen von Exterior (2903)
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).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 20 Stunden
  • Hey danke
    vor 3 Tagen 14 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 8 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 10 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association