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

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 30. Mai 2015, 12:24
von summselbrumm!media
Für die Addon-Entwicklung wollte ich noch wissen, wie den die Syntax von XForm in der Erstellung eines Backend-Formulars heisst. Das ist zwar nicht mehr XForm; trotzdem brauchts mans bei Erstellung eines Addons mit formularbefüllter Tabelle im Frontend, das vom Redaktor dann aber editierbar sein soll (z.B. für Kommentare, Mitgliederanmeldungen, Eventagendas etc.). Hier was ich zum Laufen gebracht habe als select_sql

Pipe:

Code: Alles auswählen

select_sql|label|Bezeichnung:|SELECT row1 AS id, row1 AS name FROM rex_table ORDER BY row1
im Frontend/Modul direkt via PHP:

Code: Alles auswählen

$xform->setValueField('select_sql', array("label","Bezeichnung","SELECT row1 AS id, row1 AS name FROM rex_table ORDER BY row1","","","1","bitte wählen","0"));
im Backend, z.B. für Formular-Ausgabe in einer Addon-Page:

Code: Alles auswählen

$field = &$form->addSelectField('label');
  $field->setLabel($I18N->msg('prefix_label'));
  $select = &$field->getSelect();
  select->setSize(1);
  $select->addOption($I18N->msg('prefix_pleasechoose'),0);
  $query = 'SELECT row1 AS label, row1 as id FROM rex_table ORDER BY row1';
  $select->addSqlOptions($query);
  $select->setAttribute('style','width: 150px');
Bzw. mit Concat, wenn man gleich mehrere Werte braucht, um Z.B. einen Serienbrief-Export vorzubereiten oder ähnliches:

Code: Alles auswählen

$field = &$form->addSelectField('label');
  $field->setLabel($I18N->msg('prefix_label'));
  $select = &$field->getSelect();
  select->setSize(1);
  $select->addOption($I18N->msg('prefix_pleasechoose'),0);
  $query = 'SELECT CONCAT(row1, ", ", row2) AS label, CONCAT(row1, ", ", row2) as id FROM rex_table ORDER BY row1';
  $select->addSqlOptions($query);
  $select->setAttribute('style','width: 150px');
Achtung: doppelte Anführungszeichen sind entscheidend.

Hinweis: redaxo/include/classes/class.rex_form.inc.php kann Hinweise geben.

Re: XForm Formular direkt per PHP bauen - checkbox

Verfasst: 30. Mai 2015, 14:35
von summselbrumm!media
Ich hoff, das führt nicht zu weit; aber die nächste Herausforderung ist eine Checkbox

Dies hier speichert nicht ab, ob checked oder nicht. Zeile 3 ist mir völlig unklar.

Code: Alles auswählen

$field = &$form->addCheckboxField('label'); 
    $field->setLabel($I18N->msg('prefix_label'));
    $field->addOption('','','nein,ja');
Alle Addon-Entwickler scheinen die eigentlich tolle form-Klasse zu umgehen und die Formulare direkt als html zu schreiben, wahrscheinlich weil radios und checkboxes nicht möglich sind? Weiss jm. Rat? Es bruacht dringend eine Dokumentation dazu, die Lernkurve hier ist viel zu steil.

Eine Möglichkeit ist auch eine checkbox mit select zu umgehen.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 13. Dez 2015, 20:06
von steri
Hallo ich steh irgendwie grad an:
ich möchte dass bei einem Abo-Bestellformular die alternative Rechnungsadresse nur dann validiert wird wenn auch die checkbox "alternative Rechnungsadresse" angehackt ist.
Mein Aufbau sieht so aus:

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','abo_form');
$xform->setObjectparams('form_id','abo_formular');
$xform->setObjectparams('form_name','abo_formular');

$xform->setValueField('text', array("adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('checkbox', array("andere_rechnungsadresse","Andere Rechnungsadresse","nein,ja","0"));

$xform->setValueField('text', array("rechnung_adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('submit', array('senden', 'Bestellen'));

$xform->setValidateField('empty', array('adresse', 'Bitte Adresse eintragen!'));

$formData = $xform->objparams['value_pool']['email'];
if ($formData['andere_rechnungsadresse'] == 'ja') {
$xform->setValidateField('empty', array('rechnung_adresse', 'Bitte Rechnungs-Adresse eintragen!'));
}

$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

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


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

Aber das funktioniert leider nicht weil das erste $formData oben leer bleibt - hat jemand eine idee wie ich da machen könnte?
danke!

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 13. Dez 2015, 20:12
von RexDude
warum hast du 2 $formData's? normalerweise macht man nur 1 innerhalb if (($form = $xform->getForm()) == '') {.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 13. Dez 2015, 20:39
von steri
ja das stimmt schon - aber wie bekomme ich sonst den wert für die

Code: Alles auswählen

if ($formData['andere_rechnungsadresse'] == 'ja') 
abfrage?
wenn ich vor der if abfrage $xform->objparams['value_pool']['email']; ausgebe enthält das irgendwie keine werte und ist ein leere array

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 13. Dez 2015, 21:35
von steri
habs nun mit
if (rex_request('andere_rechnungsadresse') == 'ja')
hinbekommen.

Code: Alles auswählen

<?php

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','abo_form');
$xform->setObjectparams('form_id','abo_formular');
$xform->setObjectparams('form_name','abo_formular');

$xform->setValueField('text', array("adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('checkbox', array("andere_rechnungsadresse","Andere Rechnungsadresse","nein,ja","0"));

$xform->setValueField('text', array("rechnung_adresse","#placeholder:Adresse, Straße, Hausnummer *"));

$xform->setValueField('submit', array('senden', 'Bestellen'));

$xform->setValidateField('empty', array('adresse', 'Bitte Adresse eintragen!'));

if (rex_request('andere_rechnungsadresse') == 'ja') {
$xform->setValidateField('empty', array('rechnung_adresse', 'Bitte Rechnungs-Adresse eintragen!'));
}

$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

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


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

?>


Re: XForm Formular direkt per PHP bauen :)

Verfasst: 15. Dez 2015, 15:04
von steri
jetzt hab ich noch ein anderes Problem was eher xform allgemein betreffen dürfte:
ich hab auf einer seite 2 Formulare - obwohl beide eine unterschiedliche id und namen haben springt beim ausfüllen des ersten formualrs nach absenden die seite zum zweiten unteren formular. und bei beiden formularen werden die warning messages ausgegeben obwohl eben nur das erste abgeschickt wurde. hab ich was übersehen?

form1

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','aboform');
$xform->setObjectparams('form_id','aboform');
$xform->setObjectparams('form_name','abo_formular');
$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));
form2

Code: Alles auswählen

$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);
$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams('form_anchor','koform');
$xform->setObjectparams('form_id','koform');
$xform->setObjectparams('form_name','kontakt_formular');
$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$xform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 15. Dez 2015, 15:32
von alexplus
Wenn ich das richtig sehe, wird die erste $xform-Variable vom durch das Formular überschrieben (Hat also nix mit Redaxo/xform zu tun, sondern PHP). Der Parameter form_id ist eher für die HTML-Ausgabe und Zuordnung innerhalb von xform gedacht. Versuchs mal so: (es allerdings nicht überprüft.)

form1

Code: Alles auswählen

$aboform = new rex_xform();
$aboform->setObjectparams('form_skin', 'default');
$aboform->setObjectparams('form_showformafterupdate', 0);
$aboform->setObjectparams('real_field_names', true);
$aboform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$aboform->setObjectparams('form_anchor','aboform');
$aboform->setObjectparams('form_id','aboform');
$aboform->setObjectparams('form_name','abo_formular');
$aboform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$aboform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));
form2

Code: Alles auswählen

$koform = new rex_xform();
$koform->setObjectparams('form_skin', 'default');
$koform->setObjectparams('form_showformafterupdate', 0);
$koform->setObjectparams('real_field_names', true);
$koform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$koform->setObjectparams('form_anchor','koform');
$koform->setObjectparams('form_id','koform');
$koform->setObjectparams('form_name','kontakt_formular');
$koform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
$koform->setValueField('hidden', array('artikel_id', $REX['ARTICLE_ID']));

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 15. Dez 2015, 15:54
von steri
danke - das hatte ich auch schon ausprobiert bzw. gedacht - ist leider trotzdem immer noch so

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 7. Jan 2016, 18:01
von darwin
Hi,
jemand eine Idee wie man via PHP / xForm die URL manipulieren kann...

# bei error
if(error) dann mach url: "http://meine-domain.tld/#test

# bei success
if(send) dann url: "http://meine-domain.tld/#test

um damit auf einen id-Anker im HTML zu springen.

Danke schonmal.
grz. Chris

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 8. Jan 2016, 09:30
von darwin
[erledigt] ...

Code: Alles auswählen

$xform->setObjectparams('form_anchor', 'meinAnker');
:oops: grz. Chris

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 29. Jun 2017, 00:41
von die su
Ich habe hierzu auch einen Hänger:
Das Formular soll nicht nur an den Empfänger geschickt werden, sondern auch an den Absender, der dieses Formular ausgefüllt hat.
Kann mir jemand da ---> weiterhelfen?

Code: Alles auswählen

// send email
    $mailTo = $emailTo;
   --->    $mailTo2 = $formData['email'];
    $mailFrom = 'buchungsformular@' . preg_replace('#^www\.(.+\.)#i', '$1', seo42::getServer());
    $mailSubject = 'Neue Buchung von ' . seo42::getServer();

    // mail body
    $mailBody = 'Neue Buchung von Internetseite <br />'.PHP_EOL;

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 29. Jun 2017, 11:03
von anita
warum nimmst Du nicht db2email

hab nochmal nachgesehen z.B.

Code: Alles auswählen

 $xform->setActionField('db2email', array('booking_copy', 'emaillabel', 'info@dtp-stuttgart.de'));
            $xform->setActionField('db2email', array('booking', 'emaillabel', 'contact@javanita.com'));
e-mail-adressen anpassen; nachzulesen im Modul bookingform