
In einem aktuellen Projekt in Drupal 7 stellten wir fest, dass irgendwann Formulare - egal welcher Art - die im Overlay angezeigt werden, beim Absenden den jeweiligen submit Handler nicht aufrufen. Es wurde nur das Overlay mit dem Formular neu geladen, alle vorgenommenen Änderungen waren auch weiterhin sichtbar. Nur der Hinweis, den man von Drupal gewohnt ist, dass etwas gespeichert wurde, fehlte. Und in der Tat waren alle Änderungen nach einem Reload der Seite weg. Ziemlich ärgerlich, wenn man z.B. in Panels mehrere Einstellungen vorgenommen hatte und später feststellt, dass nichts übernommen wurde.
Dadurch dass es keinerlei Fehlermeldung gab, war es schier unmöglich die Ursache ausfindig zu machen. Auch etliche hook_form_alter() und fleissiges "dsm'en" führte zu keinem Ergebnis.
Nächster Schritt war ein frisches Drupal 7 Setup mit sämtlichen Modulen wie im Projekt aufzusetzen, um zu schauen, ob dieses Phänomen auch hier auftritt. Ohne Erfolg. Alles lief wie es sollte. Formulare im Overlay wurden problemlos gespeichert/ausgeführt.
Da wir zur Versionierung unserer Projekte git einsetzen, und wir wussten, dass Formulare im Overlay bis zu einem bestimmten (leider von uns nicht genau feststellbaren) Zeitpunkt funktionierten, bestand unser nächste Vorgehen darin, sich durch die einzelnen Commits zurück zu hangeln, bis der Fehler nicht mehr auftritt. Ziemlich aufwendig und zeitintensiv, wenn in der Zwischenzeit etliche Commits stattgefunden haben.
Hier bietet jedoch git eine geniale Option: git bisect.
git bisect unterstützt einen mittels binärem Suchalgorithmus Commits als "good" oder "bad" zu markieren, und so recht schnell den ersten "bad" Commit - also die Stelle, ab der in unserem Fall das Overlay-Modul Ärger machte - ausfindig zu machen.
Den Commit auschecken, von dem man weiß, dass es noch funktioniert hat:
$ git checkout a672s65…
$ git bisect start
$ git bisect good
Den Commit auschecken, von dem man weiß, dass es nicht mehr funktioniert hat:
$ git checkout master
$ git bisect bad
Ab hier checkt git automatisiert dazwischenliegende Commits aus, man schaut ob das Problem noch existiert und gibt dann entweder
git bisect good oder git bisect bad ein. Irgendwann spuckt einem git den Zeitpunkt aus, ab dem das Problem existierte. Durch ein git bisect reset wird das Prozedere nun beendet.
In unserem Fall wurde bei diesem Commit für die Drupal-Suche via dem search_api Modul das Suchfeld - also ein exposed Filter von Views - als Block in unsere Seite eingebunden. Und in der Tat, wenn wir das Suchfeld deaktivierten funktionierte Overlays wieder.
Die Frage nach dem "Warum" bleibt bis zum jetzigen Zeitpunkt noch unbeantwortet, da sich der Fehler in einem frischen Drupal Setup nicht reproduzieren lässt.
Als Workarround für unser Projekt haben wir ein einfaches Formular mit Textfeld in einen Block gepackt. Im submit-Handler wird ein Redirect auf die Suchergebnis-View gesetzt und der Inhalt des Textfeldes als query-Parameter übergeben.
Auch wenn wir die genaue Ursache noch nicht ausfindig machen konnten, hilft eventuell dieser Ansatz jemanden, der auf ein ähnliches Problem mit dem Overlays-Modul gestoßen ist.
Auf jeden Fall war bei der Fehlersuche git bisect eine sehr große Hilfe.
Neueste Kommentare
vor 1 Woche 1 Tag
vor 4 Wochen 4 Tage
vor 4 Wochen 4 Tage
vor 6 Wochen 3 Tage
vor 7 Wochen 13 Stunden
vor 7 Wochen 22 Stunden
vor 7 Wochen 1 Tag
vor 8 Wochen 1 Tag
vor 9 Wochen 5 Tage
vor 9 Wochen 5 Tage