[1.16/2.0] Überarbeitung Tag-Parser

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

[1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 11.06.2012, 22:33:24

Hallo zusammen,

nachdem die Arbeit an 1.16 nun starten kann, wollte ich euch kurz informieren, woran ich aktuell arbeite.

Vor einiger Zeit haben wir im Forum eine Diskussion über die Schachtelung von Tags und deren Implementierung geführt. Ein Negativpunkt des aktuellen Parsers ist die Konvention der Tag-Klassen-Namen. Diese sind streng an Präfix und Klasse/Tag-Name gebunden. Wird diese Abhängigkeit gelöst, lassen sich einige Klassen sparen und somit die Performance und das Naming verbessern.

Aus diesem Grund habe ich in einem POC die Klasse Taglib um das Attribut $name ergänzt, sowie $class für den "echten" Namen der Tag-Klasse genutzt. Der Tag <core:addtaglib/> definiert sich nun wie folgt:#

Code: Alles auswählen

new TagLib('core::pagecontroller', 'core_taglib_addtaglib', 'core', 'addtaglib') 
Dies ermöglicht
  • die Wiederverwendung der Klasse in tieferen Hierarchien unter anderem Tag-Präfix bzw. -Namen und
  • die Bennenung der Tag-Klasse nach UCC-Schreibweise.
Im POC habe ich ersteres für den <html:placeholder />-Tag umgesetzt und die Klasse html_taglib_placeholder in z.B. <html:template /> als <template:placeholder /> 1:1 wiederverwendet. Dies lässt sich - ohne genauere Analyse - für 5-10 weitere Tags nutzen.

Ich würde zu dieser Änderung gerne eure Meinung hören, da diese zwar tiefgreifend für den Parser ist, sich jedoch mit einem Trick in <core:addtaglib /> halbwegs abwärtskompatibel umsetzen lässt. Die Sandbox läuft aktuell ohne Anpassung und eure Applikationen könnten schrittweise umgestellt werden und dann das Features richtig nutzen.

Ist das Feature eurer Meinung nach für 1.16 interessant oder sollen wir hier auf 2.0 warten?
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von Megger » 12.06.2012, 12:53:10

Klingt sehr interessant, würde meiner Meinung nach auch einiges vereinfachen!

Dadurch könnte man doch dann auch z.B. getstring ohne weitere Probleme in eigene Taglibs einbauen, oder?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 12.06.2012, 16:13:54

Hallo Tobi,

danke für dein Statement. Ich habe heute morgen nochmal andere Anwendungen getestet und es lassen sich "alte" Anwendungen tatsächlich ohne Anpassungen betreiben. Sofern keine weiteren Einwände kommen, würde ich den Code dann in 1.16 einbringen.
Dadurch könnte man doch dann auch z.B. getstring ohne weitere Probleme in eigene Taglibs einbauen, oder?
Korrekt. Aktuell gibte s z.B. nicht 5 oder 6 Klassen, die eigentlich nur ui_getstring wrappen, sondern nur 2 - html_taglib_getstring und form_taglib_getstring. Letzteres, wa die Formular-Implementierung tatsächlich eigene Funktionalitäten von der Taglib-Klasse erwartet. Das wiederum ich aber ok, denn eigene Funktionalitäten sollen ja durch Ableitung oder Delegation in eigenen Tags verwendet werden. Ganz krass ist es bei den *_taglib_placeholder-Klassen, denn hier gibt es jetzt tatsächlich nur noch eine. :)
Viele Grüße,
Christian

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von TipTop » 12.06.2012, 18:25:39

Hi,

so ganz versteh ich das jetzt nicht. Was ändert der neue Parameter an der Vorgehensweise des XML-Parsers? An der XSL-Schreibweise ändert sich jetzt nichts, oder?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 12.06.2012, 22:36:21

Hi,

grundsätzlich ändert sich die Notation in den Templates zunächst nichts. Das ist auch so gewollt, da die XML-Tags ja eines der zentralen Konzepte des APF sind und auch bleiben sollen. Der zusätzliche Parameter bei der Definition eines Tags erlaubt dir, explizit einen Klassen-Namen für die Implementierung des Tags nach der Vorgabe der Klasse Document anzugeben. Für das obige Beispiel würdest du zukünftig einen eigenen Tag wie folgt einbinden:

Code: Alles auswählen

<core:addtaglib 
   namespace="extensions::htmlheader::pres::taglib" 
   class="htmlheader_taglib_addstaticcss"
   prefix="htmlheader" 
   name="addstaticcss" 
/>
Damit erreichst du eine Trennung des Klassen-Namens vom Tag-Bezeichner (Präfix und Tag-Namen), was sich positiv auf die Benennung der Klassen und die Wiederverwendung von Klassen in unterschiedlichen Hierarchien unter anderem Tag-Bezeichner auswirkt.

Heißt heute - analog zum obigen Beispiel - eine Tag-Implementierung noch core_taglib_addtaglib, kannst du sie zukünftig mit dem UCC-konformen Namen AddTaglibTag benennen. Weiterhin kannst du die eine implementierung ohne weitere Wrapper-Klassen, die auf Grund der bisher herrschenden Namenskonvention nötig sind, sowohl als <core:addtaglib /> als auch als <template:addtaglib /> einsetzen. Aktuell spart das 17 PHP-Dateien und sorgt damit sogar als Nebeneffekt noch für bessere Performance, da keine zusätzlichen Klassen geladen werden müssen.

Soweit verständlich?

EDIT: noch eines hatte ich vergessen: die Änderung wirkt sich ebenso positiv auf die APF-Konvention für die Adressierung von Klassen per Namespace und Klassen-Namen aus. Dies ist mittlererweile komplett durchgezogen - leider bisher nicht bei den Taglibs (und vielleicht noch bei den Controllern).
Viele Grüße,
Christian

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von TipTop » 13.06.2012, 13:03:21

Ahh jetzt ist es klar. Das wäre echt n tolles Feature, also...
Ist das Feature eurer Meinung nach für 1.16 interessant
..aufjedenfall :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 13.06.2012, 20:47:12

Hallo zusammen,

Änderungen sind jetzt eingecheckt. Bitte um Tests & Feedback.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 14.06.2012, 00:03:35

Hallo zusammen,

Details zur Migration habe ich unter http://wiki.adventure-php-framework.org ... 5_auf_1.16 zusammengestellt. Bei Fragen/Anregungen einfach melden.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 14.06.2012, 22:13:17

Hallo zusammen,

ich habe lokal einige Performance-Tests durchgeführt und konnte eine Verbesserung der Performance um rund 3% messen. Das klingt zunächst nicht viel, jedoch habe ich nur einfache Testfälle mit wenigen zu ladenden Klassen gewählt. Sofern die volle Bandbreite der Tags ausgenutzt wird, sollte noch mehr drin sein.

Im Hinblick auf den funktionalen Vorteil sehe ich das Feature als gelungen an.
Viele Grüße,
Christian

Coach83
Beiträge: 271
Registriert: 13.05.2010, 17:33:12
Kontaktdaten:

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von Coach83 » 15.06.2012, 05:22:06

Guten Morgen,

müsste folgender Auszug nicht anders lauten:
Ein Negativpunkt der bisherigen Implementierung war die Konvention der Tag-Klassen-Namen. Diese sind streng an Präfix und Klasse- bzw. Tag-Name gebunden. Dies ermöglicht
  • die Wiederverwendung einer identischen Tag-Klasse Klasse in tieferen Hierarchien unter anderem Tag-Präfix bzw. -Namen und
  • die Bennenung der Tag-Klasse nach UCC-Schreibweise.
Entweder müsste es doch lauten "die neue Implementierung ermöglicht ....
  • die Wiederverwendung einer identischen Tag-Klasse Klasse in tieferen Hierarchien unter anderem Tag-Präfix bzw. -Namen und
  • die Bennenung der Tag-Klasse nach UCC-Schreibweise.
oder eben, dass die alte dies nicht ermöglichte...oder irre ich mich?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 15.06.2012, 20:09:37

Völlig richtig erkannt. :) Habe den Text ausgebessert.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von jwlighting » 20.06.2012, 19:38:11

Ich finde die Anpassung ebenfalls sehr gelungen, erst recht bei 100% Abwärtskompatibilität.

Kompliment! :)

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 20.06.2012, 21:56:35

Hallo Jan,

danke für dein Feedback! :) Solltest du noch weitere Verbesserungsvorschläge für 1.16 haben, immer her damit!
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von dr.e. » 14.07.2012, 14:19:36

Hallo zusammen,

ich habe heute den ersten Wurf der Tag-/Taglib-Dokumentation für 1.16 fertiggestellt. Da die Doku noch nicht Online gestellt werden kann, habe ich das PDF unter http://media.adventure-php-framework.or ... F_1_16.pdf abgelegt.

Feedback herzlich willkommmen!
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: [1.16/2.0] Überarbeitung Tag-Parser

Beitrag von jwlighting » 15.07.2012, 11:23:17

Sieht schon gut aus, auf jeden Fall sehr ausführlich! Ist das noch eine Arbeitsversion oder die Endversion?

Mir fiel gerade noch ein, ob sich nicht eine Methode transformChildren() gut machen würde. Dann müsste man zur Transformierung der Kinder nicht immer die selbe Foreach-Schleife neu schreiben ;)

LG :)

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste