Project

General

Profile

Feature #5456

TWIG als Template Engine fuer Report Syntax

Added by Carsten Rose over 2 years ago. Updated over 1 year ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
Start date:
17.02.2018
Due date:
26.07.2019
% Done:

0%

Estimated time:
Discuss:

qfq-record.txt (396 Bytes) qfq-record.txt Carsten Rose, 02.07.2018 15:43
result.png (18.7 KB) result.png Carsten Rose, 02.07.2018 15:43
test.html.twig (112 Bytes) test.html.twig Carsten Rose, 02.07.2018 15:43
twig.patch (4.86 KB) twig.patch Carsten Rose, 02.07.2018 15:43
display_committee.txt (1023 Bytes) display_committee.txt Nicola Chiapolini, 30.07.2018 11:35
display_state.txt (965 Bytes) display_state.txt Nicola Chiapolini, 30.07.2018 11:35
screenshot.png (44.6 KB) screenshot.png result of the two display_* elements Nicola Chiapolini, 30.07.2018 11:35
1537
1591

Associated revisions

Revision 46364d90 (diff)
Added by Nicola Chiapolini over 2 years ago

improve twig integration

  • Add Twig Extension to parse QFQ Links
  • Pass assoc-array of query result as context
  • allow to pass template as string

History

#1 Updated by Carsten Rose over 2 years ago

  • Target version set to next

#2 Updated by Benjamin Baer over 2 years ago

  • Target version changed from next to 18.10.3

#3 Updated by Carsten Rose over 2 years ago

  • Assignee changed from Nicola Chiapolini to Elias Villiger

#4 Updated by Carsten Rose over 2 years ago

  • Priority changed from Normal to High

#5 Updated by Carsten Rose over 2 years ago

1537

Anyway, die Anhänge: * twig.patch: Die nötigen Änderungen am QFQ-Source * test.html.twig: Das verwendete Template file * qfq-record.txt: Der Inhalt des QFQ-Record auf der Test-Seite * result.png: Screenshot des Resultats

Zusätzliche Voraussetzung: Twig muss natürlich installiert sein (Paket `php-
twig` in Debian stable).

Finde das sieht schon sehr vielversprechend aus... Was noch fehlt sind
natürlich die UnitTests und die Doku

härzlichi Grüäss und es schöns Wuchenend
Nicola

#6 Updated by Elias Villiger over 2 years ago

Bei Gebrauch von Twig würde ev. die Generalisierung von QFQ etwas verloren gehen:
  • Die einzelnen Felder (row.firstname, row.name, row.link|qfqlink, ...) müssten pro Template jeweils einzeln aufgelistet werden (? - jedenfalls im Fall von speziellen Spalten wie AS _link)
  • Spezielle Spalten wie _Pagee oder versteckte Spalten AS _hidden müssten vermutlich auch einzeln gehandhabt werden (wie qfqLink für AS _link) - je nach angebotener Funktionalität könnte das schnell kompliziert werden.

Die Idee des Templatings finde ich aber sehr attraktiv, da man so einiges an repetitivem Tippen einsparen könnte. Mein Vorschlag wäre, ein QFQ-eigenes Templating anzubieten:

10 {
  sql = SELECT * FROM person
  template = fileadmin/qfqTemplates/standardTable
}

Der User kann dann entsprechende Templates abspeichern, welche in QFQ-Notation gehalten sind, z.B.

head = <table class="table">
tail = </table>
rbeg = <tr>
rend = </tr>
fbeg = <td>
fend = </td>

Bequem wäre auch, wenn man einzelne Felder des Templates überschreiben könnte (Template wird zuerst eingelesen, dann mit zusätzlichen angegebenen Feldern überschrieben):

20 {
  sql = SELECT * FROM person
  template = fileadmin/qfqTemplates/standardTable
  head = <table class="table table-condensed"><tr><th>Id</th><th>Name</th><th>E-Mail</th></tr>
}

#7 Updated by Nicola Chiapolini over 2 years ago

Bei Gebrauch von Twig würde ev. die Generalisierung von QFQ etwas verloren gehen [...]

Korrekt. Aber das ist ja auch ein Stück weit die Idee. Ziel von Template-Engines ist üblicherweise Darstellung von Datenzugriff zu trennen. (d.h. das SQL-Query sollte keine Info zur Darstellung enthalten)

(Aber es wäre natürlich nicht besonders schwierig Templates zu erstellen, die die Darstellung vom Spaltennamen abhängig machen.)

Mein Vorschlag wäre, ein QFQ-eigenes Templating anzubieten

Davon würde ich dringend abraten. Wenn immer möglich sollten wir auf bestehende und etablierte Tools zurückgreifen. (und im Dekanat werden definitiv weiter mit Twig arbeiten, das hat sich bei uns bereits sehr bewährt. Nötigenfalls werden wir das also auch weiterhin selbst reinpatchen)
Falls du konkrete, komplexere Template-Beispiele möchtest, einfach melden.

Bequem wäre auch, wenn man einzelne Felder des Templates überschreiben könnte

Twig bietet die Möglichkeit aus einem Template andere Teil-Templates zu laden. Das ist aber in meinem QFQ-Code noch nicht richtig integriert.

#8 Updated by Elias Villiger over 2 years ago

  • Assignee changed from Elias Villiger to Carsten Rose

#9 Updated by Elias Villiger over 2 years ago

Macht Sinn. Ich dachte, es ginge vor allem darum, den Boilerplate von head/tail/rbeg/... zu reduzieren, aber wenn es um eine Trennung von Design und SQL-Code geht, macht Twig schon Sinn.

Das oben beschriebene "QFQ-eigene Templating" wäre auch nicht wirklich ein "Templating" in dem Sinne, sondern eher ein Auslagern häufiger Darstellungsoptionen zur Wiederverwendung.

Für eigenen meinen Gebrauch von QFQ (geolean) sehe ich keine grossen Anwendungen für Templating im Sinn von Twig; aber da es sich bei euch bewährt, würde mir ein Einblick in euren Umgang damit bestimmt weitere Perspektiven zeigen.

Ich habe das Ticket jetzt wieder Carsten zugewiesen, dann können wir nach seinen Ferien weiterschauen.

#10 Updated by Nicola Chiapolini about 2 years ago

1591

Hier noch zwei komplexere Beispiele für den Einsatz von Twig. (display_committee.txt, display_state.txt und screenshot.png)

#11 Updated by Carsten Rose almost 2 years ago

  • Target version changed from 18.10.3 to 18.12.1

#12 Updated by Carsten Rose almost 2 years ago

  • Target version changed from 18.12.1 to 141

#13 Updated by Marc Egger over 1 year ago

  • Assignee changed from Carsten Rose to Marc Egger
  • Priority changed from High to Normal

#14 Updated by Marc Egger over 1 year ago

  • Due date set to 19.06.2019

#15 Updated by Carsten Rose over 1 year ago

  • Target version changed from 141 to 20.10.1

#16 Updated by Carsten Rose over 1 year ago

  • Due date changed from 19.06.2019 to 26.07.2019

#17 Updated by Carsten Rose over 1 year ago

  • Target version changed from 20.10.1 to 19.7.1

#18 Updated by Carsten Rose over 1 year ago

  • Status changed from New to Closed

Also available in: Atom PDF