Einleitung
Hinweis: Dieses Feature ist Teil der Visforms Subscription und in der freien Visforms Version nicht enthalten.
Die Feldplatzhalter unter dem Reiter “Datenauswahl” beziehen sich auf die Tabellen-Felder der Daten-Tabelle des Formulars. Im Tabellen-Feld “created_by” der Daten-Tabelle der Formulare wird allein die Benutzer-ID gespeichert.
Alle anderen zusĂ€tzlichen Informationen, aus anderen Tabellen der Joomla-Datenbank, mĂŒssen mit einem eigenen zusĂ€tzlichen SQL-Statement abgefragt werden. Die Daten-Felder dieses zusĂ€tzlichen SQL-Statements können dann im PDF-Template verwendet werden. Darunter fallen auch alle weiteren Informationen des Benutzers, die in der Joomla-Datenbank gespeichert sind.
Ausgangspunkt
Das PDF-Template ist direkt und einfach aufgebaut, so wie in diesem Abschnitt der Dokumentation beschrieben: Struktur und Arbeitsweise.
SekundÀres SQL-Statement wird notwendig
Das PDF-Template kommt also bislang ohne die fortgeschrittenen SQL-Features (SekundÀre SQL-Statements) aus. Ein solches sekundÀres SQL-Statement wird aber immer dann notwendig, wenn Daten aus einer anderen Datenbank-Tabelle als der Formular-Daten-Tabelle im PDF angezeigt werden sollen.
SekundĂ€res SQL-Statement fĂŒr das PDF-Template anlegen
Definieren Sie ein kleines sekundĂ€res SQL-Statement fĂŒr das PDF-Template auf dem Reiter “SQL-Statements”, welches die gewĂŒnschten Benutzer-Daten aus der Joomla Benutzer-Tabelle abfragt:
- Reiter “SQL-Statements”, “Referenzname” = “user-data”
- Reiter “SQL-Statements”, “Prozesstyp” = “Free”
- Reiter “SQL-Statements”, “SQL-Statement” = “select name, username, email from #__users where id = ${item:created_by};”
Das sekundĂ€re SQL-Statement wird bei der Abarbeitung des PDF-Templates fĂŒr jeden Datensatz des Formulars neu ausgewertet.
Bei der Auswertung des sekundÀren SQL-Statements pro Datensatz des Formulars können auf die Felder des aktuellen Datensatzes des Formulars mit Platzhaltern zugegriffen werden.
select name, username, email from #__users where id = ${item:created_by};
Hinweis: Der Ausdruck item ist ein statischer Name, der sich auf den aktuellen Datensatz des Formulars bezieht.
Hinweis: Der Ausdruck created_by ist der Name des Datensatz-Feldes des Formulars.
Hinweis: Der Tabellen-Name einer Tabelle in einer Joomla Datenbank besitzt immer einen sogenannten Tabellen-Namen-Prefix, der allen Joomla Tabellen-Namen innerhalb einer Joomla-Instanz gleichermaĂen vorangestellt ist. Sie mĂŒssen den Tabellen-Namen-Prefix weder kennen noch explizit schreiben. Verwenden Sie anstelle dessen den Joomla eigenen Platzhalter fĂŒr den Tabellen-Namen-Prefix: #__.
Text mit Platzhaltern fĂŒr das sekundĂ€re SQL-Statement einfĂŒgen
FĂŒgen Sie den gewĂŒnschten freien Text mit den Platzhaltern in das PDF-Template ein. Das EinfĂŒgen muss innerhalb eines HTML-Elements erfolgen. Andernfalls gĂ€be es keine Möglichkeit festzulegen, dass ein “SekundĂ€res SQL-Statement” an dieser Stelle ausgewertet werden soll.
FĂŒr dieses Beispiel eignet sich etwa das p-Element sehr gut. Aber auch alle anderen HTML-Elemente sind grundsĂ€tzlich möglich. Ein anderes sehr einfaches HTML-Element ist etwa das span-Element.
<p id="user-data" class="sql">The form data was submitted and created by the following user:<br />
name = ${user-data:name}<br />
username = ${user-data:username}<br />
email = ${user-data:email}</p>
Hinweis: Der Ausdruck class="sql" ist der Hinweis, dass hier ein sekundÀres SQL-Statement ausgewertet und auf die Platzhalter angewandt werden soll.
Hinweis: Der Ausdruck id="user-data" ist der Referenzname des sekundÀren SQL-Statements, das verwendet werden soll.
Hinweis: Der Ausdruck ${user-data:name} ist ein Platzhalter fĂŒr das Select-Feld 'name' aus dem sekundĂ€ren SQL-Statement mit dem Referenznamen 'user-data'.
Weitere ErklÀrungen finden Sie in der Dokumentation des PDF-Features.
Mehr dazu in:
SekundÀre SQL-Statements an ein HTML-Element binden.
Der “Testen” Button
Mit dem Button ‘Testen’ können Sie bereits vor der eigentlichen Generierung des PDF-Dokuments prĂŒfen, ob das SQL-Statement zumindest fehlerfrei ist und wie viele Ergebnisse es liefert. Der Button ‘Testen’ kann allerdings nur verwendet werden, wenn noch kein Platzhalter im SQL-Statement enthalten sind. Die Platzhalter im SQL-Statement werden erst spĂ€ter zur Laufzeit ersetzt. Beim Klick auf den Button “Testen” wird also ein Platzhalter nicht ersetzt und verursacht dadurch einen SQL-Format-Fehler. Es erscheint eine entsprechende Fehler-Warnung.
Dieses SQL erzeugt keinen Fehler:
select name, username, email from #__users where id = 234;
Wobei der willkĂŒrliche Wert ‘234’ die ID eines existierenden Joomla-Benutzers ist.
Dieses SQL erzeugt einen Fehler:
select name, username, email from #__users where id = ${item:created_by};
Wir empfehlen daher das SQL-Statement zuerst mit festen Werten zu entwickeln. Erst gegen Ende fĂŒgen Sie, an den notwendigen Stellen, die gewĂŒnschten Platzhalter ein, wenn alles andere bereits korrekt funktioniert.
Bei etwas gröĂeren und unhandlichen SQL-Statements empfehlen wir, die Entwicklung und den Test in einer explizit dafĂŒr vorgesehenen Umgebung vorzunehmen. Dazu gehören etwa der “MySQL Admin” oder eine dezidierte Entwicklungs-Umgebung (IDE). Auch in diesem Fall fĂŒgen Sie erst am Schluss, an den notwendigen Stellen, die gewĂŒnschten Platzhalter ein, wenn alles andere bereits korrekt funktioniert.
Der Dokument-Teil des PDF-Templates
Der Dokument-Teil des PDF-Templates hat nach dem EinfĂŒgen des Texts mit den Platzhaltern fĂŒr das sekundĂ€re SQL-Statement folgendes Aussehen.
Um den Dokument-Teil des PDF-Templates zu editieren können Sie den Editor ausschalten.
Klicken Sie zum Wechsel zwischen der Ansicht mit und ohne Editor auf den Toggle-Button “Editor an/aus”.
<p style="text-align: center;"><span style="font-size: 14pt; text-align: center;"><strong>Edit this Header Text</strong></span></p>
<p>Population centers may be organized into incorporated cities ...</p>
<p id="user-data" class="sql">The form data was submitted and created by the following user:<br /><b>
name</b> = ${user-data:name}<br /><b>
username</b> = ${user-data:username}<br /><b>
email</b> = ${user-data:email}</p>
<table width="100%" cellpadding="4" border="1">
<tbody>
<tr style="font-weight: bold; background-color: lightskyblue;">
<td colspan="1" align="center">first name</td>
<td colspan="1" align="center">last name</td>
<td colspan="1" align="center">company</td>
<td colspan="1" align="center">city</td>
<td colspan="1" align="center">postal code</td>
<td colspan="1" align="center">country</td>
<td colspan="1" align="center">phone</td>
<td colspan="1" align="center">email</td>
</tr>
<tr>
<td colspan="1" align="left">${first}</td>
<td colspan="1" align="left">${last}</td>
<td colspan="1" align="left">${company}</td>
<td colspan="1" align="left">${city}</td>
<td colspan="1" align="left">${postal}</td>
<td colspan="1" align="left">${country}</td>
<td colspan="1" align="left">${phone}</td>
<td colspan="1" align="left">${email}</td>
</tr>
</tbody>
</table>
<p>Â </p>
<p style="font-size: larger;">Another text line in larger font.</p>
<p>Political divisions (also referred to as administrative divisions) ...</p>
Vorschau
Um eine Vorschau in der Administration zu sehen, wechseln Sie auf den gleichnamigen Reiter “Vorschau”. Klicken Sie dort auf den MenĂŒ-Button “Vorschau” in der obersten MenĂŒ-Leiste. Nun wird hier eine eingebettete Vorschau des PDF-Dokumentes angezeigt.
Hinweis: Beim Klick auf den MenĂŒ-Button "Vorschau in neuem Tab" in der obersten MenĂŒ-Leiste, wird die Vorschau in einem neu geöffneten Tab im Web-Browser geöffnet.
In der Vorschau auf dem Reiter “Vorschau” sieht das fertige PDF-Dokument dann wie folgt aus.
Der Text enthĂ€lt die Benutzer-Informationen des Nutzers, der das Formular ausgefĂŒllt und abgeschickt hat.