Moin,
ist es möglich mit dem Hook processFormData die Weiterleitungsseite zu beeinflussen oder hat man nur Zugriff auf die eigentlichen Formularwerte?
Moin,
ist es möglich mit dem Hook processFormData die Weiterleitungsseite zu beeinflussen oder hat man nur Zugriff auf die eigentlichen Formularwerte?
Hallo zonky,
guck Dir mal meine Erweiterung linksplitter an:
https://contao.org/de/extension-list...ksplitter.html
Moin,
verstehe ich die Erweiterung so richtig, dass ich von einem Formular auf eine "Gabelungsseite" leite per normaler Formular-Weiterleitung und dort das Modul Linksplitter einbaue...
also
Code:Formular -> Weiterleitungsseite mit Linksplitter -> Seite 1 oder -> Seite 2 oder -> Seite 3
Korrekt.
Die Zielseite enthält das Modul und verteilt anhand von einer GET- oder POST-Variablen weiter. Sollte sich keine passende Weiterleitung in der Liste finden, bleibt es auf der Seite.
hmmm... mein "Ziel" wäre es, bei der ersten Formularverarbeitung den Wert für "jumpTo" während der "Laufzeit" zu verändern...
Ich sehe aktuell aber keinen Weg den Wert zu beeinflussen :-(
Ich glaube du könntest einfach den Wert in der Datenbank für das 'jumpTo' field für das jeweilige Formular verändern in deinem Hook. Soweit ich das sehe wird am Ende der processFormData function dieser Wert immer frisch geholt:PHP-Code:
// Check whether there is a jumpTo page
if (($objJumpTo = $this->objModel->getRelated('jumpTo')) !== null)
{
$this->jumpToOrReload($objJumpTo->row());
}
@Spooky
per Hook das Datenbankfeld ändern weil es später ausgelesen wird, halte ich etwas "von Hinten durch die Brust ins Auge..."
schöner wäre so was wie
... nochmal geändertPHP-Code:
// /system/modules/core/form/Form.php
// Check whether there is a jumpTo page
if ($arrSet['jumpto'] !== null && is_int($arrSet['jumpto']))
{
$this->jumpToOrReload($arrSet['jumpto']);
}
else if (($objJumpTo = $this->objModel->getRelated('jumpTo')) !== null)
{
$this->jumpToOrReload($objJumpTo->row());
}
Geändert von zonky (09.12.2013 um 12:20 Uhr)
Ich schreibe gerade an einem Frontendediting Modul, welches die Formulare zur Dateneingabe nutzt (link). Dabei müssen wir die Eingabeformulare innerhalb des processFormData-Hooks auf eine ursprüngliche Seite (auf welcher der Datensatz ausgegeben wird) umleiten.
Habe mir deswegen nochmal angesehen wie man das erreichen könnte.
Das Grundproblem ist, dass das Formular in der \Form Klasse in den Zeilen 512 - 516 auf das Model und getRelated("jumpTo") zugreift um auf diese Seite umzuleiten.
Die Methode \Model->getRelated() greift auf ein protected Array zu welches wir zur Laufzeit nicht ändern können um das Formular umzuleiten (Es gibt keinen Setter).PHP-Code:
// Check whether there is a jumpTo page
if (($objJumpTo = $this->objModel->getRelated('jumpTo')) !== null)
{
$this->jumpToOrReload($objJumpTo->row());
}
Ich bin bisher zu folgenden (nicht so schönen Lösungen) gekommen:
1.) Man leitet einfach im Hook selber hart um (Redirect).
Das ist offensichtlich keine gute Idee, da sie das Script an dieser Stelle beendet und alle Dinge die normalerweise geschehen nachdem unser Hook durchlaufen worden ist, nicht mehr stattfinden.
2.) Man überschreibt \Form indem man es in der Autoload.php mit einem eigenen \Form das von \contao\Form erbt ersetzt. Ist das Formular erstmal überschrieben hat man freie Hand und kann die Umleitung in der Formularklasse so modelieren wie man möchte. Leider wird man damit inkompatibel zu anderen Erweiterungen die einen ähnlichen Weg wählen.
3.) Man überschreibt Contao\FormModel in der Autoload und schafft sich einen entsprechenden Getter.
Dies löst zwar kurfristig das Problem hat aber ähnliche Folgen wie 2.).
4.) Man manipuliert das Formular per Reflection setzt das attribute $arrRelated auf public und liest es einfach aus.
Das ist zwar schon besser (kompatibler) als das Vorgehen in den ersten drei Alternativen, aber dafür ein ziemlich dreckiger Hack.
5.) Man stellt dem Contao-Core Team ein Ticket samt Fork und Patch zur Verfügung und wartet bis Contao gelernt hat die Weiterleitungsseite dynamisch zu setzen. Dies ist zwar sicher die sauberste, aber auch langsamste (und deswegen nur langfristig verwendbare) Methode.
Habt ihr noch andere Ideen wie man dieses Problem angehen kann (Vielleicht ohne gleich den Core zu hacken )?
Das würde nämlich einige Dinge erleichtern :-).
Geändert von barteljan (29.11.2014 um 12:22 Uhr)
an dem Ticket
https://github.com/contao/core/issues/6539
hat sich nix geändert - offensichtlich ist das auch in keine Version bisher eingeflossen :-((
PS: würde zu Punkt 5 passen
Geändert von zonky (29.11.2014 um 20:02 Uhr)
MetaModels-Workshop: ... wo sich die nächste Gelegenheit bietet... oder Extern oder Online
Erweiterungen: Infos im Seitenbaum, Formular-Default für Select/Checkbox/Radio (SCR), Formular-Newsletteranmeldung, Regex-Formularwidget, Lizenzmanager für Isotope
Unterstützung per Github-Sponsoring: MetaModels Handbuch und Forum, e-spin Erweiterungen
6. Man benutzt die Extension "Haste" von Terminal24 für Formulare in eigenen Modulen?
Gesendet von meinem Xperia Arc S mit Tapatalk
Klingt gut wo finde ich die (Das ER findet unter haste nix)?
Edit: Ahh ... gefunden man muss nur englisch suchen ...
Geändert von barteljan (29.11.2014 um 22:27 Uhr)
Hmm lustig. Google findest das auf Github und den englischen ER: https://contao.org/en/extension-list/view/haste.en.html
Scheint auch mittlerweile zu codefog gewandert zu sein.
Gesendet von meinem Xperia Arc S mit Tapatalk
Super vielen Dank für den Tipp, das scheint tatsächlich einiges zu erleichtern :-)
ansonsten schreib mal Kamil (codefrog) - in english please - antwortet sicher zügig...
MetaModels-Workshop: ... wo sich die nächste Gelegenheit bietet... oder Extern oder Online
Erweiterungen: Infos im Seitenbaum, Formular-Default für Select/Checkbox/Radio (SCR), Formular-Newsletteranmeldung, Regex-Formularwidget, Lizenzmanager für Isotope
Unterstützung per Github-Sponsoring: MetaModels Handbuch und Forum, e-spin Erweiterungen
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen