[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: 25. Mai 2015, 14:29
von summselbrumm!media
Und hier die Lösung

Code: Alles auswählen

// get cities list for form select

$sql = rex_sql::factory();

$sql->setQuery("SELECT name FROM rex_schoolcinemamanager_locations ORDER BY name ASC");

 for($i=0; $i<$sql->getRows(); $i++) {
    $locations[] = $sql->getValue('name');
   $sql->next();
 }

$locationlist = implode(',', $locations);

$xform = new rex_xform();
$xform->setValueField('select', array('location', 'Locations'), $locationlist));

etc.


Re: XForm Formular direkt per PHP bauen :)

Verfasst: 26. Mai 2015, 08:33
von Thomas.Blum
Hej,

dein erster Ansatz sollte funktionieren.

Code: Alles auswählen

$xform->setValueField('select_sql', array("location","Locations","SELECT name as id, name AS name FROM rex_schoolcinemamanager_locations ORDER BY name","","","1","bitte wählen"),"0"));
vg Thomas

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 26. Mai 2015, 09:54
von summselbrumm!media
Ne geht eben nicht, auch nicht in der Pipe. Ist eigentlich ein XForm-Klassiker, der mir schon viele Stunden geraubt hat :)

Und es geht übrigens auch nicht mit CONCAT() und auch nicht in Table Manager Tabellen (was ein ziemliches Problem darstellt bei Exporten dann und ich auch noch irgendwie lösen sollte...)

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Mai 2015, 08:54
von Thomas.Blum
Hej,

also ich verwende das des öfteren und glaub mir das klappt. Die Variante mit CONCAT geht übrigens auch.

vg Thomas

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Mai 2015, 09:21
von summselbrumm!media
Du siehst,dass es mir um die "Value=" geht? Ich habe den Code direkt aus dem Quellcode kopiert. Kann ich mal Deinen Quellcode anschauen? Würd mich echt interessieren. Und ich spreche nicht vom normalen select, sondern select_sql.

Code: Alles auswählen

<select class="select " id="xform-formular-field-2" name="location" size="1">
        <option value="0" selected="selected">bitte wählen</option>
        <option value="3">Chur</option>
        <option value="2">Horgen</option>
        <option value="1">Winterthur</option>
        <option value="4">Zürich</option>
 </select>

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Mai 2015, 09:51
von Thomas.Blum
Ich weiß jetzt nicht was du dir da ansehen willst

Bsp.:

Code: Alles auswählen

select_sql|label|Bezeichnung:|SELECT title AS id, title AS name FROM rex_table ORDER BY title
Ergibt

Code: Alles auswählen

<select class="select " name="label" size="1">
        <option value="" selected="selected">bitte wählen</option>
        <option value="Titel A">Titel A</option>
        <option value="Titel B">Titel B</option>
        <option value="Titel C">Titel C</option>
        <option value="Titel D">Titel D</option>
</select>
vg Thomas

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Mai 2015, 09:56
von summselbrumm!media
Wenn das so funktioniert, ist es genau das, was ich egsucht habe. Du hast da eine andere Syntax als die, welche ich fand. Merci.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 27. Mai 2015, 10:04
von Thomas.Blum
Inwiefern eine andere Syntax?

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 27. Mai 2015, 13:22
von summselbrumm!media
Im XForm (Page Beschreibung) steht folgendes

Code: Alles auswählen

select_sql -> Beispiel: select_sql|label|Bezeichnung:|select id,name from table order by name|[defaultvalue]|[no_db]|1/0 Leeroption|Leeroptionstext|1/0 Multiple Feld|selectsize
Aus dem XForm Table Manager (Felder editieren -> Formular) entnahm ich diese

Code: Alles auswählen

$xform->setValueField('select_sql', array("partner","Sponsoren","SELECT id, CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS name FROM rex_crm_contacts WHERE stkh_sponsor LIKE "ja" ORDER BY firma ","","","1","bitte wählen","0"));
Beide führen zu Zahlen im Wert von value. Ich hatte keine Ahnung und konnte auch nicht herleiten, wie man es machen muss.

Korrekt ist also

Code: Alles auswählen

.... SELECT title AS id, title AS name FROM rex_table ..... 

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 28. Mai 2015, 11:03
von Thomas.Blum
summselbrumm!media hat geschrieben:Beide führen zu Zahlen im Wert von value. Ich hatte keine Ahnung und konnte auch nicht herleiten, wie man es machen muss.
richtig, weil du die ID Spalte für das value angegeben hast.

Richtig wäre

Code: Alles auswählen

SELECT CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS id, CONCAT(firma, ', ', vorname, ' ', nachname, ', ', tel_g) AS name FROM rex_crm_contacts WHERE stkh_sponsor LIKE "ja" ORDER BY firma 
vg Thomas

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