Neueste Subscription Feature

Mehr erfahren

Feldtyp Signatur

Mehr erfahren

Feldtyp Standort

Mehr erfahren

Feldtyp Berechnung

Mehr erfahren

Mehrseitige Formulare

SQL-getriebene Felder mit Optionenlisten

Dieses Feature ist Teil der Visforms Subscription und in der freien Visforms Version nicht enthalten. Dieses Feature wurde der Subscirption mit der Version 3.4.0 hinzugefügt, die als Beta-Version released wurde.

Manchmal wollen Sie in Ihren Formularen Listboxen (oder Radio Buttons oder Checkbox-Gruppen) anzeigen, deren Auswahllisten dynamisch während der Laufzeit des Formulars aus der Datenbank bezogen werden. Wenn sie der Inhalt der Datenbank ändert, so hat das entsprechende Feld automatisch geänderte Auswahloptionen.

Die Visforms Subscription bietet Ihnen nun drei neue Feldtypen (selectsql, radiosql und multicheckboxsql) deren Auswahllisten mit Hilfe von SQL-Select-Statements dynamisch aus der Datenbank erzeugt werden.

Das SQL-Select Statement muss einen value und ein label zurückgeben

Um Auswahllisten mittels SQL aus der Datenbank zu erzeugen, müssen Sie ein valides SQL-Select Statement erstellen und in die Feldoption "SQL" der Felder vom Typ selectsql, radiosql oder mulitchekcboxsql eingeben.

Sie können ein beliebiges valides SQL-Select Statement hinterlegen. Die einzige Bedingung ist, dass das Statement einen value und ein label zurück liefert. Diese werden dann als Optionswert und als Optionslabel der jeweiligen Option verwendet..

Beispiel:: select id as value, title as label from #__content limit 10.

Weiterhin können Sie in Ihrem SQL-Select-Statement die Aliase redirecturl, mail, mailcc und mailbcc liefern, die dann von den Visforms Plugins "Optionsabhängige Erfolgsseiten" und "Optionsabhängige Empfängermail" verwendet werden.

Platzhalter im SQL

Sie können in Ihrem SQL-Select-Statement Platzhalter verwenden, die zur Laufzeit mit realen Werten ersetzt werden. Dies können einerseits Werte des Joomla! User Objekts, des aktuellen Joomla! Benutzers sein oder Werte aus dem aktuellen Joomla! Input Objekt..

Platzhalter des Joomla! User Objects haben das Format ${user.parametername}. Zum Beispiel. ${user:id} für die Id des aktuellen Benutzers..

Platzhalter des aktuellen Input Objekts haben das Format ${input:parametername}, wobei Sie "parametername" mit dem Namen des Input Parameters ersetzen müssen, den Sie verwenden wollen..

Aufgepasst

Da das SQL-Statement in einer Textarea eingegeben wird und der Inhalt von Textareas von Joomla! beim Speichern prozessiert/gefiltert wird, müssen Sie folgende Punkte vermeiden.

  • Stellen Sie sicher, dass Ihr Statement an keiner Stelle die Kombination von < > enthält (auch wenn eine Menge Text zwischen den beiden Klammern steht). Formen Sie Ihr Statement notfalls um, so dass Sie > anstelle von < verwenden können.
  • Stellen Sie sicher, dass der Code keine Zeilenschaltung enthält.
  • Stellen Sie sicher, dass Sie keine 2 oder mehr aufeinanderfolgenden Leerzeichen eingegeben haben

Platzhalter für Parameter, die im POST als Array übergeben werden

Einige Formularfeldertypen übergeben die Benutzereingaben im POST als Array. Dies sind insbesondere Listboxen und Checkboxgruppen. Wenn Sie in Ihrem SQL-Statement einen Platzhalter für einen solchen Parameter verwenden wollen, so müssen Sie eine spezielle Formateingabe beachten: ${input:fieldname[]}. Visforms konvertiert dann automatisch alle Werte dieses Parameters in einen String, so dass sie in der mysql in() Function verwendet werden können. Beispiel: Der Input Parameter select[]=value1 select[]=value2 wird zu ("value1","value2") konvertiert und kann folgendermaßen direkt in einer SQL Where Bedingung verwendet werden:: where dbfieldname in ${input:select[]}

Der Test Button

Sie können den Test Button neben dem SQL-Eingabefeld verwenden, um Ihr SQL-Statement zu testen. Bitte beachten Sie, dass, wenn Sie Platzhalter in Ihrem Statement verwenden, das Ergebnis des Tests in der Administration vermutlich andere Werte liefert, als die Verwendung des Feldes im Formular oder gegebenenfalls, wenn Sie einen Input-Parametger-Platzhalter verwenden auch eine Fehlermeldung. Bei komplexen SQL-Statements empfehlen wir, das SQL-Statement in einer MySql Konsole zu entwicklen und zu testen.

ACL

Da Sie prinzipiell jedes beliebige SQL-Select Statement in diesen Feldtypen verwenden können ist es auch möglich jede Art von Daten, die in der Datenbank existieren anzuzeigen, auch sensible. Wir haben deshalb eine zusätzliche Benutzerberechtigung geschaffen, mit der Sie das Recht ein SQL-Statement anzulegen, auf ausgewiesenen Benutzergruppen begrenzen können (Standard ist nur Super User).

Auswirkungen der Nutzung dynamisch erstellter Auswahllisten auf gespeicherte Formulardaten

Auswahllsiten dynamisch zu erzeugen hat Auswirkungen darauf, was mit Feldern vom Typ selectsql, radiosql und multicheckboxsql gemacht werden kann. An erster Stelle ist es nicht möglich, diese Felder dazu zu verwenden die Sichtbarkeit anderer Felder zu steuern (Sie werden in der Liste "Bedingte Anzeige" in anderen Feldern nicht angezeigt). Weiterhin ist es möglich, dass wenn Sie die übermittelten Formulardaten speichern, dass später eine Zuordnung gespeicherter Wert zu den aktuellen Auswahllisten der Felder nicht mehr möglich ist (wenn sich nämlich die Auswahlliste zwischenzeitlich geändert hat und die entsprechende Option nicht mehr enthält). Dies wirkt sich vor allem beim Editieren von Daten im Frontend aus oder wenn die Benutzereingaben in PDF-Dokumenten verwendet werden sollen.

Spezielle Optionen für selectsql

Es ist möglich die Auswahlliste eines selectsql Feldes während der Benutzer im Frontend Eingaben im Formular macht, dynamisch nachzuladen, abhängig von den Benutzereingaben. Bitte beachten Sie, dass Sie, wenn Sie dieses sehr mächtige Feature nutzen wollen, Sie das entsprechende Feld nicht mehr per "Bedingte Anzeige" ein und ausblenden können. Sie können entweder die Option "Relaod" verwenden oder die "Bedingte Anzeige". Wenn Sie die Option "Nachladen wenn" aktivieren, wird Ihnen eine Listbox eingeblendet in der Sie festlegen können, welche Benutzereingaben ein Nachladen auslösen. Das Nachladen einer Auswahlliste einzustellen ist vor allem dann sinnvoll, wenn Sie im nachgeladenen Feld die Benutzereingabe in Form einen Input-Parameters auswerten.

Beispiel: Sie haben in Ihrer Datenbank Daten zu Urlaubsregionen und für jede Region eine Liste von Hotels. Nachdem der Benutzer sich für eine Urlaubsregion entschieden hat, soll ihm eine Liste der dortigen Hotels zur Auswahl angeboten werden. Dies kann einfach mit 2 selectsql Feldern und der Optionen des Nachladens des "Hotel"-Feldes bei Änderung der Auswahl der Urlaubsregion erreicht werden.

Feld verstecken, wenn die Optionenliste leer ist

In der Feldkonfiguration von Feldern vom Typ selectsql finden Sie eine zusätzliche Option mit der Sie das Feld verstecken können, wenn die Auswahlliste leer ist. Diese Option gibt es nur, wenn es sich um ein Feld handelt, dessen Auswahlliste nachgeladen wird. So können Sie sicherstellen, dass die Listbox zur Hotelauswahl aus obigem Beispiel erst angezeigt wird, wenn der Benutzer eine Urlaubsregion gewählt hat, da die Hotellistbox erst dann Optionen enthält..

Übersicht Passende Subscription finden