Fortgeschrittene Feature

Durch DatensÀtze Iterieren

Das komplette Template vervielfachen

StandardmĂ€ĂŸig wird das PDF-Template fĂŒr jeden Datensatz separat komplett abgearbeitet. Wenn Sie etwa 10 DatensĂ€tze haben, dann wird das Template 10-mal aufgerufen, die Platzhalter jeweils mit dem aktuellen Datensatz ersetzt und diese finalen ersetzten Texte hintereinander angefĂŒgt.

Einen Teil des Templates vervielfachen

Das ist nicht immer das gewĂŒnschte Verhalten. Manchmal wollen Sie etwa, dass innerhalb des Dokuments fĂŒr jeden Datensatz, nur eine neue zusĂ€tzliche Tabellenzeile oder ein einzelner zusĂ€tzlicher Listeneintrag eingefĂŒgt wird.

Das ist sogar sehr einfach möglich. Sie mĂŒssen dazu nur ein kleines HTML-Attribut an der richtigen Stelle einfĂŒgen.

Sehen Sie sich dazu auch das Beispiel-Template “Bestellungen” im Demoformular “Obst” an. Sie mĂŒssen einfach nur das class="loop" Attribut an das HTML-Element, das multipliziert werden soll, anhĂ€ngen. Toggeln Sie den Editor auf die Ansicht HTML-Code, um das zu tun.

Bitte beachten Sie folgende kleine EinschrÀnkung. Diese Loop-Elemente können nicht geschachtelt werden.

Hinweis: Sie dĂŒrfen innerhalb eines HTML-Elements mit dem class="loop" Attribut kein weiteres HTML-Kind-Element mit einem class="loop" Attribut haben.

SekundÀre SQL-Statements

Ein ziemlich fortgeschrittenes Feature

Wir wollen Ihnen ein wirklich weitreichendes Tool zur VerfĂŒgung zu stellen. Das ist der Zweck der vielen möglichen SQL-Statements, die Sie auf dem Reiter “SQL-Statements” erstellt und im PDF-Template ĂŒber den Namen referenzieren können.

Beliebige weitere Daten in das PDF-Dokument integrieren

Sie können damit zusÀtzlich zur primÀren Datenauswahl, beliebige weitere Daten in das PDF-Dokument integrieren.

Diese sekundÀren Daten können stammen aus:

  • zusĂ€tzliche Daten desselben Formulars,
  • Daten eines anderen Formulars,
  • beliebigen Daten aus der Joomla Datenbank.

Platzhalter beziehen sich auf den aktuellen primÀren Datensatz

Diese sekundÀren SQL-Statements ermöglichen eine zweite, möglicherweise abhÀnge Datenauswahl. Denn in den sekundÀren SQL-Statements können Sie sich durch Platzhalter auf die Felder des aktuellen primÀren Datensatzes beziehen. Die sekundÀren SQL-Statements werden sowohl angewandt, wenn Sie ein PDF-Dokument in der Administration erzeugen als auch, wenn Sie es im Frontend erstellen.

Zwei Typen fĂŒr sekundĂ€re SQL-Statements

Prozesstyp “Form”

Wenn Sie weitere Daten desselben Formulars einschließen wollen, wĂ€hlen Sie fĂŒr das sekundĂ€re SQL-Statement den Prozesstyp “Form”. Sie hinterlegen fĂŒr den Prozesstyp “Form” ein SQL WHERE Teil-Statements. Diese SQL WHERE Teil-Statements beziehen sich allein auf den Teil eines kompletten SQL-Statements, der sich auf die Anfrage-Bedingungen hinter dem sogenannten ‘WHERE’ SchlĂŒsselwort bezieht.

Prozesstyp “free”

Wenn Sie weitere beliebige Daten aus der Datenbank einschließen wollen, wĂ€hlen Sie fĂŒr das sekundĂ€re SQL-Statement den Prozesstyp “free”. Sie hinterlegen fĂŒr den Prozesstyp “free” ein ganz gewöhnliches vollstĂ€ndiges SQL-SELECT Statement.

Die 1:n Beziehung

Beide Prozesstypen von sekundĂ€ren SQL-Statements (“Form” und “free”) werden fĂŒr jeden Datensatz der PrimĂ€rauswahl je ein mal angewandt. Die sekundĂ€ren SQL-Statements können ihrerseits auch mehrere DatensĂ€tze zurĂŒckliefern.

Durch diese einfache Tatsache können Sie ein 1:n Beziehung von dem aktuellen PrimÀr-Datensatz (1 Datensatz) zu den durch das sekundÀre SQL-Statement selektierten SekundÀr-DatensÀtzen (n DatensÀtze) erzeugen.

PDF SQL Statements

SekundÀre SQL-Statements an ein HTML-Element binden

Die Daten, die durch die sekundĂ€ren SQL-Statements selektiert werden, können Sie in Ihrem PDF-Dokument verwenden. Sie mĂŒssen Sie das sekundĂ€re SQL-Statement an die gewĂŒnschte Stelle im Dokument binden.

Platzieren Sie hierzu einfach folgende zwei Attribute in das gewĂŒnschte HTML-Element (etwa ein tr-Element):

  • ein class="sql" Attribut zu Kennzeichnung des Wiederhol-Bereiches
  • ein id="SQL statement name" Attribut zur Angabe des anzuwendenden sekundĂ€ren SQL-Statements.

Platzhalter wie gewohnt auch fĂŒr sekundĂ€re SQL-Statements

Innerhalb des HTML-Elements fĂŒgen Sie dann wie gewohnt Platzhalter in der gewohnten Syntax ein. Die Platzhalter beziehen sich auf die Namen das verwendeten sekundĂ€ren SQL-Statements, also auf das mit id="SQL statement name" ausgewĂ€hlte sekundĂ€re SQL-Statement. Sehen Sie hierzu auch weiter unten “Platzhalter fĂŒr Daten aus SQL-Statements”.

Das geschachtelte HTML-Element wird vervielfacht

Angenommen Sie haben eine 1:n Beziehung zwischen der primĂ€ren Datensatzauswahl und der sekundĂ€ren Datensatzauswahl. Die Beziehung entsteht rein praktisch durch die AusfĂŒhrung des sekundĂ€ren SQL-Statements mit den aktuellen Daten des primĂ€ren Datensatzes.

Nun wird das entsprechend gekennzeichnete oder auch gebundene HTML-Element, automatisch fĂŒr jeden sekundĂ€ren Datensatz kopiert:

  • als Template verwendet,
  • seine Parameter ersetzt und
  • an den bestehende Text fortlaufend angehĂ€ngt.

Die “HTML-Code” Ansicht des Editors verwenden

Am besten wechseln Sie im Editor mit dem Button “Toggle Editor” in die “HTML-Code” Ansicht um die Attribute einzufĂŒgen. Schauen Sie sich das “invoice” Beispiel PDF-Template des “register” Formulars hierzu genauer an. Beachten Sie insbesondere die Reiter “SQL Statements” und “Dokument” sowie die PDF-Vorschau.

Hinweis: Sie dĂŒrfen ein SQL-Statement nur 1 mal in Ihrem Dokument-Template einbinden.

Den jeweils letzten Datensatz merken wir uns

WĂ€hrend der Ersetzung der Platzhalter werden die Datenwerte, die gerade zum Ersetzen benutzt werden, automatisch als die “letzten Werte” gemerkt. Die letzten ersetzten Werte bleiben daher bis zum Ende der Dokumenterstellung vorhanden. Das gilt selbstverstĂ€ndlich pro verwendetem SQL-Statement.

Daher können Sie diese letzten Werte jederzeit an spĂ€terer Stelle im HTML-Template noch weiter verwenden. Also etwa auch ganz am Ende des PDF-Templates oder in den Bereichen von Seitenkopf und Seitenfuß.

Hinweis: Bitte beachten Sie, dass wirklich nur die letzten Daten des letzten Durchlaufs pro SQL-Statement gespeichert werden.

Interessant wird diese Wiederverwendung der gemerkten Daten vor allem bei SQL-Statements, die nur genau einen Datensatz liefern. Hier ist also der letzte Datensatz gleichzeit auch der einzige Datensatz. Seine Daten können ĂŒberall und zu jeder Zeit und ĂŒber das ganze PDF-Template verteilt, ersetzt werden.

Diese ‘einmaligen’ DatensĂ€tze mit nur einem Datensatz können sehr sinnvoll sein. Sie können dadurch beliebige notwendige Summen ĂŒber alle nur denkbaren Dinge oder auch besondere einmalige Informationen aus der Datenbank direkt im HTML-Template verwenden.

Daten aus unterschiedlichen Formularen vereinen

Sie können SQL-Statements nutzen, um Daten, die mit unterschiedlichen Formularen ĂŒbermittelt wurden, in einem PDF-Dokument zu vereinen.

Ein Beispiel

Sie haben ein erstes Formular, mit dem Sie allgemeine Benutzerdaten erheben. Und Sie haben ein zweites ein Formular, mit dem die Benutzer regelmĂ€ĂŸig ihre Bestellungen abgeben.

Diese Daten könnten nun in einem einzigen PDF-Dokument vereint werden. Etwa um eine Übersicht aller Bestellungen eines Kunden mitsamt den hinterlegten Kundendaten zu erstellen.

Sehen Sie sich hierzu das “invoice” Beispiel PDF-Template des “register” Formulars fĂŒr ein konkretes Beispiel genauer an. Beachten Sie insbesondere die Reiter “SQL Statements” und “Dokument” sowie die PDF-Vorschau.

Hinweis: Es ist nicht möglich sekundÀre SQL-Statements zu schachteln. Ein HTML-Element mit class="sql" Attribute darf keine HTML-Kindelemente mit einem class="sql" Attribut haben. Auch keine HTML-Enkelelemente.

Platzhalter fĂŒr Daten aus SQL-Statements

Das Format fĂŒr Platzhalter ist das folgende: ${SQL-statement-name:SQL-field-name}.

Ein Beispiel

Sie haben ein SQL-Statement mit dem Namen “sum” auf dem “SQL-Statement” Reiter erstellt. Dieses Statement lautet:

select round(sum(F2179 * F2180), 2) as sum, round(sum(F2179 * F2180) * 0.19, 2) as tax from vf38_visforms_143 where id < 10;

Die Platzhalter zur Nutzung der Daten aus diesem Statement lauten: ${sum:sum} and ${sum:tax}.

Platzhalter in den SQL-Statements

SQL-Statements können auch selbst Platzhalter enthalten, die mit den aktuellen Werten ersetzt werden. Diese Ersetzung erfolgt immer unmittelbar bevor das SQL-Statement ausgefĂŒhrt wird.

Diese Platzhalter können Werte referenzieren fĂŒr:

  • das Joomla Framework Objekt User
    • ${user:parameter-name} und
  • das Joomla Framework Objekt Input
    • ${input:parameter-name}.
  • Daten aus der primĂ€ren Datenselektion, der gerade bearbeitet wird
    • ${item:field-name}, etwa ${item:created_by}.

In den SQL-Statements zur Datenauswahl können Sie alternativ anstelle von

  • der konkreten ID-Feldnamen F111 like ‘%value 1%‘
  • auch Visforms Platzhalter ${maiden} like ‘%value 1%‘ verwenden.