[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • XForm Formular direkt per PHP bauen :)
Seite 1 von 3

XForm Formular direkt per PHP bauen :)

Verfasst: 26. Nov 2013, 20:15
von RexDude
Hallo zusammen,

ich habe gerade durch Gregors Hinweis erfahren, dass man mit XForm Formulare auch direkt über PHP bauen kann. Ich hatte nämlich öfter das Problem, dass ich mit dieser Pipe Sprache nicht richtig klargekommen bin, bzw. ich mir hier etwas mehr Flexibilität gewünscht habe. Z.b. die Möglichkeit per if Abfrage ein Feld dazuzupacken oder nicht oder nen größer JS Block dazu etc.

Aber das hier finde ich total cool:
https://github.com/dergel/redaxo4_yrewr ... p#L15-L115

Mein erstes XFORM Formular sieht jetzt so aus:

Code: Alles auswählen

<?php
$xform = new rex_xform;

$xform->setValueField('text', array('test', 'foo'));
$xform->setValidateField('empty', array('test', 'nope!'));
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));

if ($xform->objparams['actions_executed']) {
    echo"!";
} else {
    echo $xform->getForm();
}
?>
Meine ersten 2 Fragen:

1) Das mit dem actions_executed funzt aber noch nicht, bzw. weiss jemand wie das aussehn muss?

2) Wie komme ich nun komfortabel an die Werte, so dass ich z.B. ne Mail rausschicken kann?

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 26. Nov 2013, 21:36
von Xong
Hi Rudi,
RexDude hat geschrieben:1) Das mit dem actions_executed funzt aber noch nicht, bzw. weiss jemand wie das aussehn muss?
Das wird nur gesetzt, wenn das Formular abgesendet wurde, und natürlich irgendwelche Actions ausgeführt wurden: https://github.com/dergel/redaxo4_xform ... c.php#L367
Da du keine Actions definiert hast, ist das false.

Außerdem musst du erst getForm aufrufen, damit dieser Wert überhaupt gesetzt wird. Ein Abfrage, ob Actions ausgeführt wurden, hat also nur innerhalb der postAction-Methode der Value-Klassen einen Sinn.
RexDude hat geschrieben:2) Wie komme ich nun komfortabel an die Werte, so dass ich z.B. ne Mail rausschicken kann?
Das läuft doch ganz normal über die XForm-Klassen, z. B. class.xform.action_email.inc.php.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 26. Nov 2013, 21:50
von RexDude
Dankeschön für die Antowort. Nun bin ich aber trotzdem genau so schlau wie vorher.
Also wie genau muss nun der Code aussehen um 1) auf das abgesendet und validierte Formular zu reagieren und b) an das Feld "test" zu kommen und den Inhalt auszugeben?

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 00:24
von Xong
Huhu!
RexDude hat geschrieben:Dankeschön für die Antowort. Nun bin ich aber trotzdem genau so schlau wie vorher.
Also wie genau muss nun der Code aussehen um 1) auf das abgesendet und validierte Formular zu reagieren und b) an das Feld "test" zu kommen und den Inhalt auszugeben?
Zu 1)
Meinst du das ernst? :D

Code: Alles auswählen

$xform = new rex_xform();

$xform->setValueField('text', array('test', 'foo'));
$xform->setValidateField('empty', array('test', 'nope!'));
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));

$xform->setActionField('email', array('action', 'email', 'from@email.de', 'to@email.de', 'Betreff', 'Nachricht'));

echo $xform->getForm();
Einen ersten Orientierungspunkt für sowas kann dir übrigens auch der Code des XForm-Formbuilders geben.

Zu 2)
Die eingegebenen Werte stehen dir in $this->objparams['value_pool']['email'] und $this->objparams['value_pool']['sql'] zur Verfügung.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 00:30
von RexDude
Meinst du das ernst?
grrr, ja nicht jeder ist so ein XForm Crack wie du Xong! Als bitte nicht so herablassend wenns geht ;)

Ja und wie lautet nun die if abfrage: wenn seite neu aufgerufen --> zeige formular. wenn formular submitted -> zeige formular nicht sondern echo $this->objparams['value_pool']['test']?

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 01:53
von RexDude
Also ich habs jetzt so gelöst. Wusste nicht das getForm() leer zurückgibt, wenn form submitted.

Code: Alles auswählen

<?php
$xform = new rex_xform();

$xform->setValueField('text', array('test', 'foo'));
$xform->setValidateField('empty', array('test', 'nope!'));
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));

$form = $xform->getForm();

if ($form == '') {
    // form submitted
    echo $xform->objparams['value_pool']['email']['test'] . "!";
} else {
    // show form
    echo $form;
}
?>
kannst du mir noch sagen was es mit den zwei array email und sql auf sich hat? warum ist da der wert test dopplet drin?

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 01:58
von Xong
Hi Rudi!
RexDude hat geschrieben:
Meinst du das ernst?
grrr, ja nicht jeder ist so ein XForm Crack wie du Xong! Als bitte nicht so herablassend wenns geht ;)
So hab ich das nicht gemeint. Aber ich musste mir die Klasse auch erst anschauen und den Code erarbeiten. Hab das selbst auch noch nie gemacht.
RexDude hat geschrieben:Ja und wie lautet nun die if abfrage: wenn seite neu aufgerufen --> zeige formular. wenn formular submitted -> zeige formular nicht sondern echo $this->objparams['value_pool']['test']?
Du kannst über die objparams ziemlich viel einstellen. Schau dir mal form_showformafterupdate an.
RexDude hat geschrieben:kannst du mir noch sagen was es mit den zwei array email und sql auf sich hat? warum ist da der wert test dopplet drin?
In das email-Array werden generell alle Werte geschrieben. Das sql-Array enthält nur die Werte, die (optional) auch in die Datenbank geschrieben werden sollen. Die meisten Value-Klassen kennen dafür das no_db-Flag.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 01:59
von RexDude
Eine $xform->getValueField('test'); fänd ich übrigens ganz nett :) Gibts sowas nicht schon?

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 02:07
von RexDude
Ok, vielen Dank Robert :)

So sieht nun mein erster Exkurs aus mit XFORM per reinem PHP :D

Code: Alles auswählen

<?php
$xform = new rex_xform();

$xform->setValueField('text', array('test', 'foo'));
$xform->setValidateField('empty', array('test', 'nope!'));
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));

$form = $xform->getForm();

if ($form == '') {
    // form submitted
    $formData = $xform->objparams['value_pool']['email'];
    
    echo $formData['test'] . "!";
} else {
    // show form
    echo $form;
}
?>
Ist schon geil irgendwie :D

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 02:11
von RexDude
Jetzt kann ich auch endlich ne Email rausschicken die ne korrekte Anrede enthät:
- Sehr geehrte Frau
- Sehr geehrter Herr

:mrgreen:

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 12:05
von Xong
RexDude hat geschrieben:Jetzt kann ich auch endlich ne Email rausschicken die ne korrekte Anrede enthät:
- Sehr geehrte Frau
- Sehr geehrter Herr
Ich definier mir für solche Fälle entweder eine eigene Klasse, die das kann, oder so:

Code: Alles auswählen

select|anrede|Anrede|Bitte wählen=,Frau=Sehr geehrte Frau,Herr=Sehr geehrter Herr,Familie=Sehr geehrte Familie
Dann kannst du im E-Mail-Template mit ###anrede### die Anrede an den Anfang der E-Mail schreiben.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 12:13
von RexDude
Den Trick kannt ich jetzt auch noch nicht...XForm ist halt voller Überraschungen ;)

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Nov 2013, 14:16
von Xong
RexDude hat geschrieben:Den Trick kannt ich jetzt auch noch nicht...XForm ist halt voller Überraschungen ;)
Also um´s mal positiv auszudrücken: Man kann und muss sehr kreativ damit umgehen. :D

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Feb 2014, 11:39
von RexDude
Pure PHP-XForm with String Table Support
http://www.redaxo.org/de/download/module/?modul_id=647

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 23. Feb 2014, 22:26
von webghost
cool - so gefällt mir xForm auch wieder, danke :mrgreen:

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Feb 2014, 15:24
von RexDude
he he, bittschön :D So hat man finde ich viel mehr Möglichkeiten. Die wenigsten Redakteuere fummeln ausserdem im Formbuilder herum.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Feb 2014, 15:42
von webghost
ja genau... ich machte bisher immer alles selber ohne xForm sobald es etwas anspruchsvoller wurde. Ich denke ein normales Formular mit einer Mailfunktion hab ich so auch noch schneller geschrieben als in der xForm-Sprache, konnte mich damit nie anfreunden...

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Jun 2014, 14:42
von Larsen
Hi,

bitte, könnte mir jemand erklären, wie ich die Daten am Ende in eine Tabelle schreibe?
Sprich das php-Pendant zu "Bei Submit: Nur in Datenbank speichern..." aus dem xform-Modul.

Ich vermute es ist etwas wie

Code: Alles auswählen

$xform->setObjectparams('main_table', 'rex_meinetabelle');
aber bisher kein Erfolg damit.

Ach ja, und den Debug Modus würde ich dann auch gern verwenden können. Habe jetzt

Code: Alles auswählen

$xform->setDebug(TRUE);
drin, aber keine Ausgabe...

Ciao, Lars

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Jun 2014, 14:49
von RexDude
Setzt doch einfach ein INSERT INTO ab. Ganz einfach.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Jun 2014, 14:52
von Larsen
also ganz ohne xform code...

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 21. Jun 2014, 01:21
von RexDude
yup. deshalb hab ich mir das ganze auch zurechtgebaut um eben hier mehr direkten einfluss zu haben wie ich was wo speichere. und die ganzen werte stehen ja in $formData[].

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 21. Jun 2014, 09:18
von Larsen
Cool. Danke!

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 29. Jul 2014, 22:25
von alexplus
Hi!

Gibt's eigentlich hier eine Möglichkeit, den Standardwert / Rückgabewert für die Checkbox festzulegen? Sowas wie:

Code: Alles auswählen

$xform->setValueField('checkbox', array('agb', 'Ich habe die AGB gelesen', 'nein,ja'));
Im Moment bekomme ich ja nur 0/1 als Antwort raus.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 29. Jul 2014, 23:05
von RexDude
Kannst du nicht einfach per If-Abfrage dir hier was mit dem Rückgabewert zusammenbauen. Bei der PHP XForm Variante ist das ja gerade der Vorteil nochmal was zu machen mit den Rückgabewerten ehe man sie in ne Email packt.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 30. Jul 2014, 00:55
von alexplus
RexDude hat geschrieben:Kannst du nicht einfach per If-Abfrage dir hier was mit dem Rückgabewert zusammenbauen.
Doch, kann ich. Aber bevor ich das mache, frage ich lieber nach ;) Zumal das meiste zu XForm + PHP ja hier dokumentiert ist.

Bei einer Auswahlliste ist es ja bspw. möglich, "value" und "Beschreibung" anzugeben, weil es ja auch für die Ausgabe benötigt wird.