[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
Seite 1 von 3

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.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 6. Okt 2014, 18:31
von steri
hallo,

mich würde noch interessieren wie ich das xform template ansprechen kann - ich habs mit

Code: Alles auswählen

$xform->setActionField('db2email', array('contact','', 'email@domain.at'));
probiert aber es kommt kein email an

und der debug modus wär wirklich noch super

Code: Alles auswählen

$xform->setDebug(true);
geht leider nicht

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 6. Okt 2014, 18:47
von RexDude
Hi,

Templates habe ich noch nie wirklich benutzt. Mache dass direkt per PHP um so auch die volle Kontrolle zu haben. Ist aber in dem Modul mit drin als Beispiel.

Und wegen Debugmodus müsstest du vielleicht mal schauen wie das das Formbuilder Modul macht. Ich meine da gabs auch einen Debug Modus den man einschalten konnte. Kann mich aber auch irren.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 6. Okt 2014, 19:52
von steri
danke im formbuilder steht das mit dem debug genauso drinnen - aber geht eben leider nicht.
ich hab das jetzt ohne template gemacht

für alle dies brauchen können - danke an rexdude

Code: Alles auswählen

<?php


$xform = new rex_xform();

//$xform->setDebug(TRUE);

// value vields

$xform->setValueField('html', array('name', 'Ich interessiere mich für<div class="clear">&nbsp;</div>'));
$xform->setValueField('checkbox', array('buch', 'Buch', 'nein,ja'));
$xform->setValueField('checkbox', array('tv', 'TV', 'nein,ja'));
$xform->setValueField('html', array('name', '<div class="clear">&nbsp;</div>'));
$xform->setValueField('text', array('anrede', 'Anrede *'));
$xform->setValueField('text', array('vorname', 'Vorname *'));
$xform->setValueField('text', array('nachname', 'Nachname *'));
$xform->setValueField('text', array('strasse', 'Straße / Nr.'));
$xform->setValueField('text', array('plz', 'PLZ / Ort'));
$xform->setValueField('text', array('email', 'E-Mail *'));
$xform->setValueField('captcha', array('Bitte tragen sie den Text ein', 'Bitte prüfen das Text Eingabe Feld'));
$xform->setValueField('submit', array('Senden', 'Abschicken'));


// validate fields
$xform->setValidateField('empty', array('email', 'Bitte tragen Sie Ihre E-Mail Adresse ein'));
$xform->setValidateField('email', array('email', 'Bitte überprüfen Sie Ihre E-Mail Eingabe'));
$xform->setValidateField('empty', array('anrede', 'Bitte tragen Sie Ihre Anrede ein'));
$xform->setValidateField('empty', array('vorname', 'Bitte tragen Sie Ihren Vornamen ein'));
$xform->setValidateField('empty', array('nachname', 'Bitte tragen Sie Ihren Nachnamen ein'));


// other stuff
$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']); 


if (($form = $xform->getForm()) == '') {
	// form submitted
	$formData = $xform->objparams['value_pool']['email'];


	$mailFrom = $formData['email'];
	$mailSubject = 'Anfrage - www.domain.at';

	// mail body	
	$mailBody = '';
	$mailBody .= 'Ich interessiere mich für:' . PHP_EOL;
	$mailBody .= 'Buch: ' . $formData['buch'] . PHP_EOL;
	$mailBody .= 'TV: ' . $formData['tv'] . PHP_EOL . PHP_EOL;
	$mailBody .= 'Anrede: ' . $formData['anrede'] . PHP_EOL;
	$mailBody .= 'Vorname: ' . $formData['vorname'] . PHP_EOL;
	$mailBody .= 'Nachname: ' . $formData['nachname'] . PHP_EOL;
	$mailBody .= 'Straße / Nr: ' . $formData['strasse'] . PHP_EOL;
	$mailBody .= 'PLZ / Ort: ' . $formData['plz'] . PHP_EOL;
	$mailBody .= 'E-Mail: ' . $formData['email'] . PHP_EOL;

	// init mailer
	$mail = new rex_mailer();

	if ($formData['buch'] == 'ja') {$mail->AddAddress('buch@domain.de', 'buch@domain.de');}
	if ($formData['tv'] == 'ja') {$mail->AddAddress('tv@domain.de', 'tv@domain.de');}
	$mail->WordWrap = 80;
	$mail->FromName = $mailFrom;
	$mail->From = $mailFrom;
	$mail->Sender = $mailFrom;
	$mail->Subject = $mailSubject;
	$mail->Body = nl2br($mailBody);
	$mail->AltBody = strip_tags($mailBody);


	// send mail
	if ($mail->Send()) {
		echo '<p>Vielen Dank für Ihr Interesse an Projekt!<br>
Wir bemühen uns, Ihre Anfrage schnellstmöglich zu bearbeiten.</p>';
	} else {
		echo '<p>FEHLER - Bitte versuchen Sie es noch einmal.</p>';
	}

} else {
	// show form
	echo $form;
}




?>


Re: XForm Formular direkt per PHP bauen :)

Verfasst: 10. Mai 2015, 11:50
von summselbrumm!media
Mit

Code: Alles auswählen

$xform->setValueField('text', array('name', 'Name'));
bekomme ich

Code: Alles auswählen

<p class="formtext formlabel-name" id="xform-formular-name">
    <label class="text  " for="xform-formular-field-1" >Name</label>
    <input type="text" class="text   " name="FORM[formular][1]" id="xform-formular-field-1" value="" />
</p>
Das Text-Input bekommt also nicht die das erforderliche name="name". So kann ich die Werte nicht in die DB schreiben ;((

Anders bei einem hidden input, dort funktionierts.

An was liegt das?

Git es irgendwo eine klare, explizite Übersicht über die direkten php-Anweisungen für XForm? ich hab auch nach seeeehr langem Suchen nirgends etwas gefunden....


Mit Dank für Hinweise!

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 11. Mai 2015, 09:40
von Thomas.Blum
Hej,

> Das Text-Input bekommt also nicht die das erforderliche name="name". So kann ich die Werte nicht in die DB schreiben

die Werte schreibt XForm in die Datenbank. Da brauchst du nix zu machen.

Das was du aber haben willst, heißt

Code: Alles auswählen

objparmas|real_field_names|true
oder

Code: Alles auswählen

$xform->setObjectparams('real_field_names',true);
vg Thomas

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 20:44
von summselbrumm!media
Dankeschön. Hab zudem gemerkt, dass man aus Cheatset zu Redaxo 4.5. diese xForm Attribute herauslesen kann. (Für alle, die diese Frage auch haben werden).

Zudem: geht sowas eigentlich in einem Modul:

Code: Alles auswählen

$xform->setValueField('text', array('name', $I18N->msg('donationcenter_thanxUpage_name')));
ich meine: Kann die Sprachvariablen a) in Modulen verwenden b) innerhalb dieses XForm-Aufbaus? Muss die Inkludierung der Sprachfiles im config-File verändert werden?

Mit Dank!

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 21:51
von RexDude
So viel ich weiss gibts $I18N per default nicht im Frontend.
Ich vermute du musst es explizit anlegen, so wie das REDAXo eigentlich an dieser Stelle auch macht: https://github.com/redaxo/redaxo4/blob/ ... #L132-L135

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 21:58
von summselbrumm!media
Merci. Das übersteigt mein Wissen. Wäre echt praktisch gewesen.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 22:13
von RexDude
$I18N ist halt eigentlich nur fürs Backend gedacht.
Aber wie gesagt. Die 3 Codezeilen von oben rein, dann hast du's.
Und $REX['CUR_CLANG'] (Frontend) auf $REX['LANG'] (Backend) ummappen musst du noch. rex_create_lang() erwartet ja ein string wie "de_de".

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 22:20
von summselbrumm!media
Wie gesagt, ich versteh Bahnhof. Für mich ist Addonbau mehr ein Puzzlen von Codestücken...

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 14. Mai 2015, 22:33
von summselbrumm!media
"Ummappen" ist mir ein fremder Begriff. Und ich erwarte nicht, dass Du mir alles codest. Ich machs sonst mit dem Addon "Platzhalter". Ich finde einfach, das hat ein so unübersichtliches Interface, find kaum noch was dort.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 15. Mai 2015, 00:03
von RexDude
Es gitb auch das String Table Addon ;)
Aber du willst das doch mitliefern mit deinem eigenen Addon oder? Dann macht es schon Sinn es in den Langfiles zu belassen, zumal ja hier ein Benutzer eh nix änder wird oder soll.

Naja rex_create_lang() erwartet z.b. "de_de" oder "en_gb". Du hast aber nur 0,1,2 etc. für $REX[CUR_CLANG]. Also wenn 1 englisch ist muss 1 = en_gb sein. Den Rest überlasse ich jetzt aber dir ;)

Re: XForm Formular direkt per PHP bauen - $I18N

Verfasst: 16. Mai 2015, 17:00
von summselbrumm!media
Habs mal so gelöst, da man ja nicht wissen kann ob '0' nun deutsch oder irgendeine andere Sprache ist:

Code: Alles auswählen

// get language of visitor as 'de', 'en' etc... and bring to I18N-Format. We want to use Backend lang file for module

$curlang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
            
            if ($curlang == 'de') 
            
                {$currentlanguage = 'de_de';}
            
            if ($curlang == 'en') 
            
                {$currentlanguage = 'en_gb';}
                
            else {}


// include $I18N (Frontend has no I18N)


if (!is_object($I18N)) {
        
                        
            $includepath = $REX['INCLUDE_PATH'].'/addons/donationcenter/lang/';
            
            $I18N = rex_create_lang($currentlanguage,$includepath,true);
           
        }
         

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 16. Mai 2015, 17:49
von summselbrumm!media
Dann noch eine Frage zur Validierung. Was ist daran falsch?

Code: Alles auswählen

$xform->setValidateField('preg_match', array('name', '/[9]/i', $I18N->msg('donationcenter_validation_nosymbols')));
Sollte dies nicht alles durchlassen ausser eine 9? Sind die Slashes und Klammern so, wie es XForm benötigt? (Ist so im XForm-Modul angegeben). Was auch immer ich für Varianten probiere a-zA-Z etc., immer kommt die Meldung. Um das Namens und das Nachrichtenfeld zu schützen, würde ich folgendes machen:

Code: Alles auswählen

$xform->setValidateField('preg_match', array('name', '/[^$+{}']/', $I18N->msg('donationcenter_validation_nosymbols')));

Re: XForm Formular direkt per PHP bauen - setValidateField

Verfasst: 16. Mai 2015, 18:02
von summselbrumm!media
Anscheinend klappts so

Code: Alles auswählen

$xform->setValidateField('preg_match', array('name', '/^[a-zA-ZäüöéàèÄÜÖÉÀÈß +.-]{5,30}$/', $I18N->msg('donationcenter_validation_nosymbols')));
Das wäre dann z.B. "nur Buchstaben, Bindestrich und Punkt und der Eintrag muss zwischen 5 und 30 Zeichen lang sein".