contao/import — Issue #2182: 2-stufiger Rendering Prozess
Author: importer
Created: 2011-11-29 19:10:18+00:00
State: open
Labels: Feature, framework

Hallo,

Ein Problem was mit bei einigen Modulplanungen/vorhaben in letzter Zeit im Wege steht, insbesondere beim Zusammenspiel mehrerer Module ist, das man nur schwer (sprich verkompliziert) Einfluss auf andere Module hat.
Beispiel: Ich habe eine Seite mit Modul A und B. Die Reihenfolge in der diese beiden Module generiert werden ist zwar wohldefiniert, jedoch abhängig davon wie die Einstellungen im Seitenlayout sind. Angenommen A manipuliert den Status der Website (durch GET/POST oder URL allgemein) und Modul B verwendet eben jenen Status um seinen Output zu bestimmen/manipulieren. Da das Modulrendering sehr abgekapselt voneinander durchgeführt wird und zwar:

* Durchlaufe alle benötigten Module
* Konstruktoraufruf
* generate()-Aufruf und "vergiss" das Modul anschließen

kann nur dann A auf B Einfluss nehmen, wenn es vor ihm gerendert wird und nicht danach. Werden die Module in umgekehrter Reihenfolge durchlaufen (aus welchem Grund auch immer) hat man keine Möglichkeit mehr Einfluss zu nehmen.
Die einzige Variante die mir eingefallen ist, ist per Hook vor oder nach dem Rendering. Probleme hierbei:

* Wenn ich den Code zur Statusmanipulation in A mit reinschreibe (als normale Methode), wird das Modul 2 mal Konstruiert und es müssen bestimmte aufwendige Dinge wie DB-Querys oÄ mehrmals ausgeführt werden (ja vielleicht trotz Cache)
* Lagere ich den Code in eine statische Methode aus, haben wir zwar kein Doppelkonstruieren mehr, aber dafür immer noch das zweite Problem des obereren Punktes.
* Lagere ich den Code in eine komplett separate Datei/Klasse aus, hat man Codesplit der nach OO-Design für gemeinsame Funktionalität nicht sein sollte, außerdem noch das gleiche Problem wir vorgehender Punkt.

Vielleicht gibt es noch eine bessere Möglichkeit, für Hinweise wär ich sehr Dankbar.

--- _Originally created by backbone on June 24th, 2010, at 04:25pm (ID 2182)_