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

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

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 16. Mai 2015, 18:27
von summselbrumm!media
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();

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Mai 2015, 13:31
von echi
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.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 20. Mai 2015, 18:00
von Thomas.Blum
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

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 21. Mai 2015, 13:59
von echi
Das ist ja mal cool... :D

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 25. Mai 2015, 12:31
von summselbrumm!media
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.... :)

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Mai 2015, 12:36
von RexDude
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)

Re: XForm Formular direkt per PHP bauen - select_sql

Verfasst: 25. Mai 2015, 12:45
von summselbrumm!media
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.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Mai 2015, 12:49
von summselbrumm!media
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.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Mai 2015, 13:12
von summselbrumm!media
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.

Re: XForm Formular direkt per PHP bauen :)

Verfasst: 25. Mai 2015, 13:37
von RexDude
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.

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>