Table of Contents
-----------------
Inhalt der Anleitung
1 Zusammenfassung
2 Bisheriger Mechanismus und Motivation zur Änderung
3 Änderungen
4 Migration
Zusammenfassung
---------------
Dieses Dokument beschreibt die Änderungen, die 2010 am Templatesystem von
Lx-Office vorgenommen wurden, sowie Möglichkeiten zur Migration aus alten
Systemen.
Die betroffenen Templates sind alle lokalisierten Templates im Verzeichnis
templates/. Die Druckvoragen sind nicht betroffen.
Bisheriger Mechanismus und Motivation zur Änderung
--------------------------------------------------
SQL Ledger benutzt für Darstellung garkein Templatesytem. HTML wird im Perlcode
zusammengebaut, und dabei über das Locale Modul lokalisiert. Gleichzeitig
werden Druckvorlagen in einer lokalisierten Version mitgeliefert und
vorgehalten, und werden beim anlegen eines Benutzers in sein lokales
Templateverzeichnis kopiert. Mit einem mitgelieferten Editor konnten diese HTML
Dateien dann editiert werden.
Das Lx-Office Templatesystem ist zuerst in Anlehnung daran entstanden.
Templates wurden in einer _master Version vorgehalten und mit den lokalisierten
Strings aus dem Programm statisch übersetzt, und dann zur Laufzeit mit
Variablen gefüllt. Das Template System war zuerst HTML::Template, wurde später
aber durch Template Toolkit ersetzt, was flexiblere Syntax bietet und eine
Größenordnung schneller ist.
Das System hat diverse Probleme. Templates sind im Programm in einem Coding
hinterlegt, das maßgeblich durch die einkompilierte Sprache bestimmt wird. Wenn
die Sprachtexte Latin-1 sind, sind die übersetzten Templates auch Latin-1.
Wenn die angeforderte Sprache aber UTF-8 ist, müssen die Templates zur Laufzeit
umcodiert werden. Das kostet Zeit, und erschwert caching.
Das nächste Problem sind Untertemplates. In ein kompiliertes Template ein
anderes Template einzubinden ist möglich, hat aber diverse Probleme mit Coding
und Lokalisierung, weil gewisse Kontextinformationen nicht weitergegeben
werden. Die Modularisierung von Templates ist ein langfristiges Ziel, deshalb
ist es gewünscht, dass das funktioniert.
Änderungen
----------
Bisher wurden alle html Templates in allen Sprachversionen separat
vorgehalten. Diese sind jetzt entfernt, es wird nur noch die _master.html
weitergepflegt, die jetzt ohne diese Endung behandelt wird. So wird aus
template/webpages/oe/search_master.html und
template/webpages/oe/search_de.html
template/webpages/oe/search_en.html
jetzt nur noch
templates/webpages/oe/search.html
die alle Rollen übernimmt.
Gleichzeitig wurde der an HTML angelehnte Operator
überall ersetzt durch das Template Modul T8, dass zur Templateverarbeitungszeit
auf die Lokalisierung von Lx-Office zugreift. Der Operator war für
statische Kompilierung gedacht, und ist dynamisch nicht ohne massive
Geschwindigkeitseinbusse umzusetzen.
Folgende Konstrukte sollten ab jetzt verwendet werden:
Originaltext
LxERP.format_text('Text with var #1', value)
werden zu:
[%- USE T8 %]
[%- USE LxERP %]
[% 'Originaltext' | $T8 %]
[% LxERP.t8('Text with var #1', value) | html %]
Beide Module sind in Perl geschrieben und sind Instanzen der Module
SL::Template::Plugin::T8 und
SL::Template::Plugin::LxERP
Migration
--------
Installationen, die Änderungen an den Templates vorgenommen haben, müssen
diese Änderungen manuell in die neuen Templates einpflegen.
Um die Operatoren umzuwandeln steht ein Hilfsscript bereit:
scripts/migrate_template_to_t8.pl
Bitte vorher die Dokumentation von dem Script lesen.
Es gibt einige Fälle die nicht abgedeckt sind davon, aber die sollte mit einem
Diff danach zu finden sein. Vor allem kann es keine LxERP.format_text Aufrufe
umwandeln, und es hat keinen Schutz gegen nicht escapte Anführungszeichen in
den zu übersetzenden Strings.