-
compile() vs. generate()
Hi zusammen,
eine Sache verwirrt mich noch ein wenig: Modulgenerierung. Es geht um die Methoden Module::generate() und Module::compile(). In der Klasse Module wird compile() von generate() aufgerufen, compile() ist als abstract definiert.
Einige Extensions lassen compile() ganz weg bzw. leer und überschreiben generate(), teilweise wird parent::generate() aufgerufen.
Wenn ich nichts übersehen habe, wird im Core immer nur generate() aufgerufen, und solange die Methode nicht überschrieben wird, wird auch noch compile() aufgerufen (die auf jeden Fall erstellt werden muss, da sie abstract ist).
Wie soll man jetzt am besten bei eigenen Modulen vorgehen? Die nötigen Ausgaben bzw. Vorbereitungen dafür in compile() schreiben, generate() weglassen (damit die Elternmethode aufgerufen wird)? Oder generate() erweitern (und die Elternmenthode aufrufen) oder überschreiben? Was kommt oder was sollte in compile() und generate() rein? Gibt es dafür feste Regeln, Konventionen, oder ist das vollkommen egal?
-
Wenn dir die Funktionsweise der, aus der Elternklasse geerbten Funktion ausreicht, brauchst du sie ja nicht überschreiben.
Darin liegt ja nun der größte Vorteil Projektorientierter Programmierung.
Oder verstehe ich da bei dir was falsch?!
-
Hallo FloB,
schau die mal die Präsentation Christian de la Haye vom letzten Usertreffen an. Darin erläutert er die Entwicklung anhand der Erweiterung ch_flowplayer.
http://de.contaowiki.org/FrankfurtAgenda
@david enke
"Projektorientierte Programmierung" - klingt auch nicht schlecht...
Viele Grüße
ChrMue
-
Jo, Christians Präsentation habe ich gesehen. Interessanterweise erweitert er hier auch die generate()-Methode, und zwar um eine separate Ausgabe für das Backend zu machen sowie eine leere Dateiliste abzufangen. Aber geht das nicht auch alles in compile()?
Mein Problem ist, dass ich nicht genau weiß, was "best practice" bei den Modulen ist. IMO reicht es ja aus, alles in compile() zu packen, oder? Mir scheint das ganze eine Sache der persönlichen Vorliebe zu sein. Ich wollte nur nochmal nachfragen, nicht, dass ich da etwas übersehe ;).
-
Die generate-Methode wird vom FrontController aufgerufen und ist für das Ergebnis des Modules bzw. des Inhaltselements zuständig.
Sie ist in den Klassen Module bzw. ContentElement vordefiniert, weil sie sehr oft ähnliche Dinge erledigen muss: Template-Instantiieren, die üblichen Abstand davor/danach einfügen etc.
Über compile() wird diese generate() nur mit weiterer Logik bestückt und zwar der üblicherweise jeweils verschiedenen Logik. Compile ist also praktisch nur eine Hilfsmethode für die Module-Spezifika und deshalb auch abstrakt.
Überschrieben wird generate() dann, wenn man ein anderes Template benötigt (Backend-Platzhalter) oder Logik vor der Instantiierung des Templates einbauen muss.
-
Danke, Psi! Deine Antwort hat meine letzten Unklarheiten beseitigt.