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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 20:44

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!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 21:51

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

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 21:58

Merci. Das übersteigt mein Wissen. Wäre echt praktisch gewesen.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 22:13

$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".

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 22:20

Wie gesagt, ich versteh Bahnhof. Für mich ist Addonbau mehr ein Puzzlen von Codestücken...

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

14. Mai 2015, 22:33

"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.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

15. Mai 2015, 00:03

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 ;)

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - $I18N

16. Mai 2015, 17:00

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);
           
        }
         
Zuletzt geändert von summselbrumm!media am 25. Mai 2015, 12:34, insgesamt 1-mal geändert.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

16. Mai 2015, 17:49

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')));

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - setValidateField

16. Mai 2015, 18:02

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".
Zuletzt geändert von summselbrumm!media am 25. Mai 2015, 12:33, insgesamt 1-mal geändert.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

16. Mai 2015, 18:27

Und hier noch ein Beispiel, wie man es als Ganzes machen kann, inkl. praktischer Validierungen:

Code: Alles auswählen

$xform = new rex_xform();

//$xform->setDebug (TRUE);

// Fields
$xform->setValueField('hidden', array('transaction_id', $_POST['txn_id']));
$xform->setValueField('text', array('name', $I18N->msg('donationcenter_thanxUpage_name')));
$xform->setValueField('text', array('url', $I18N->msg('donationcenter_thanxUpage_website')));
$xform->setValueField('textarea', array('message', $I18N->msg('donationcenter_thanxUpage_message')));

// Validations
$xform->setValidateField('preg_match', array('name', '/^[a-zA-ZäüöéàèÄÜÖÉÀÈß +-]{2,30}$/', $I18N->msg('donationcenter_validation_name')));
$xform->setValidateField('preg_match', array('url', '/\b(?:(?:https?):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/', $I18N->msg('donationcenter_validation_url')));
$xform->setValidateField('preg_match', array('message', '/^[0-9a-zA-ZäüöéàèÄÜÖÉÀÈß +,;?!-]{2,300}$/', $I18N->msg('donationcenter_validation_textarea')));

$thanxpage = rex_getUrl($REX['ADDON']['donationcenter']['settings']['thanxArticleID']);

// Form config
$xform->setObjectparams("form_action", $thanxpage);
$xform->setObjectparams('real_field_names',true);

$form = $xform->getForm();

Benutzeravatar
echi
Beiträge: 130
Registriert: 15. Aug 2011, 11:31
Wohnort: Engstingen

Re: XForm Formular direkt per PHP bauen :)

20. Mai 2015, 13:31

Hallo,

ich bin mir nicht sicher, ob ich ein neues Thema öffnen sollte. Aber ich denke meine Frage passt vom Inhalt her ganz gut zu diesem Thema:

Kann man dem XForm auch einfach sagen: "Nimm dir die Tabelle xy und baue ein Frontend Formular dafür."
Also so wie s ja fürs Backend funktioniert, wo ich im Tablemanager angeben kann, dass die Tabelle in der Navigation erscheinen soll und schon kann ich im Backend mit einem schönen Formular auf die Tabelle zugreifen.

Ich meine also: wenn ich im Table Manager des XForm Addons eine Tabelle bastle und zusätzlich zu den ganzen Wertefeldern auch Validierungen anlege (also so wie die Tabelle (rex_com_user aus dem Community Addon), gibt es dann eine Funktion in der Art:

Code: Alles auswählen

xform-> designForm($table);
Ich hoffe, ich konnte mein Anliegen einigermaßen verständlich machen.
Grüße
echi

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

20. Mai 2015, 18:00

Hej,

nicht ganz, aber XForm hilft dir ein wenig.

Hole dir die aktuelle XForm.
Du rufst dann im Table Manager deine Tabelle auf. Oben gibt es einen Link "Formular-Code".

Hier kannst du zw. PHP und Formbuilder Variante entscheiden.

vg Thomas

Benutzeravatar
echi
Beiträge: 130
Registriert: 15. Aug 2011, 11:31
Wohnort: Engstingen

Re: XForm Formular direkt per PHP bauen :)

21. Mai 2015, 13:59

Das ist ja mal cool... :D
Grüße
echi

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

25. Mai 2015, 12:31

Ich sollte in einem Modul aus einer Addon-Tabelle die Spalte der Städte-Namen in einem XForm-Formular in einem Select-Dropdown aufgelistet haben. Das XForm-Formular wird direkt per PHP gebaut; das Problem besteht jedoch auch wenn mans per Pipe bauen würde.

Folgender Code

Code: Alles auswählen

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

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>
Nach Abschicken des Formular steht dann der Wert in der Spalte ID, als "1" etc. im Städtenamen-Feld, was dem Redaxo-User dann natürlich nichts sagt. Wir kriege ich also den Wert der Spalte "name " ebenso ins value?

Merci, scheint ne Knacknuss.... :)
Zuletzt geändert von summselbrumm!media am 25. Mai 2015, 12:38, insgesamt 1-mal geändert.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

25. Mai 2015, 12:36

Du nimmst die ID in der Ausgabe und holst dir per SQL den Namen und gibts denn aus ;)
(und alles andere was du sonst noch brauchst)

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

25. Mai 2015, 12:45

Ich verstehe noch nicht. Von hinten her gedacht brauch ich ja als Resultat sowas:

Code: Alles auswählen

$locations = "Stadt1,Stadt2,Stadt3";
damit ich es dann im Formular so (mit einem normalen select-Feld) einbauen kann

Code: Alles auswählen

$xform->setValueField('select', array('location', $I18N->msg('schoolcinemamanager_registerform_location'), $locations));
Ich habs mit sowass versucht, aber es ist ein Desaster :)))

Code: Alles auswählen

// get cities list for form select
/*
$sql = "SELECT id,name FROM rex_schoolcinemamanager_locations ORDER BY name ASC"; 

 $data = mysql_query($sql);
 while ($row = mysql_fetch_array($data)) {
	 
	 $locations = $row['name'].', ';	
	 
 }
Ich bringe die Werte nicht aus der while-Schlaufe raus, noch sind sie so formatiert wie ich es brauche. Die Datenbank liefert ein zweidimensionales Array, welches ich nicht handeln kann bisjetzt.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

25. Mai 2015, 12:49

Im Prinzip müsste ich (nur, ohne Keys) die Values aus der untersten Ebene des zwei-dimensionalen Datenbank-Arrays haben. Finde aber nirgends ne Anleitung für sowas.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

25. Mai 2015, 13:12

Soweit komm ich mal bis jetzt

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');

echo $locations;

$sql->next();

}

Das ergibt dann "ChurHorgenWinterthurZürich".

Bauchen würd ich "Chur,Horgen,Winterthur,Zürich" und zwar ausserhalb des for-Loops und ohne KOmma nach der letzten Stadt.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm Formular direkt per PHP bauen :)

25. Mai 2015, 13:37

Packst in ein array was du in der for schleife befüllst. dann ausserhalb per implode() http://php.net/manual/de/function.implode.php inkl. $glue angabe verbinden.

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

25. Mai 2015, 14:29

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.


Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

26. Mai 2015, 08:33

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

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen - select_sql

26. Mai 2015, 09:54

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...)

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 08:54

Hej,

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

vg Thomas

summselbrumm!media
Beiträge: 44
Registriert: 6. Jan 2011, 14:39

Re: XForm Formular direkt per PHP bauen :)

27. Mai 2015, 09:21

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>

Zurück zu „Allgemeines [R4]“