Zusätzliche Klasse im Template laden

Ich würde gerne die Klasse “AccountNoticeListController” nicht nur im Template “noticelist.tpl” zur Verfügung haben, sondern auch im Template “header.php”.

Ich weiß nicht, wo ich das angeben kann. Alle Ergebnisse, die ich zu meinen Suchergebnissen finde, sind “Schreib ein Modul”. Warum sollte ich? Ich will ja nur vorhandene Funktionalität an einer anderen Stelle zur Verfügung stehen haben.

Das macht man halt eben über ein Modul. :wink:

Warum? Und wie? Ich hab ein Modul geschrieben, wo ich eine vorhandene Klasse angepasst habe. In diesem Fall wüsste ich nicht mal, was ich anpassen sollte. Im “AccountNoticeListController” gibt es eine Funktion “getNoticeProductList()”. Was soll ich damit machen, damit sie mir als Modul zur Verfügung steht?

OK, ich mach also jetzt ein Modul, dass den FrontendController (oder BaseController?!) erweitert.

In das Modul übernehme ich dann (unverändert) die Funktion “getNoticeProductList”. Jetzt habe ich ein sinnfreies weiteres Modul. Wenn ich OXID update habe ich dann noch ein Modul, das ich prüfen muss, weil vielleicht hat sich ja im Core die Funktion “getNoticeProductList” geändert.

Es gibt sicher auch noch andere Methoden, eine zusätzliche Klasse zu laden (s. __call), allerdings gehört das hier nicht hin. Das ist kein PHP-Grundkurs.

Und wieso sinnfrei? Du erreichst damit doch, was Du willst. Die Methode “getNoticeProductList” ist wahrscheinlich seit Anfang an drin. Und das bei einem Update zu kontrollieren, ist wirklich ein klax.
Man kann auch alles schlechtreden. :wink:

Die Klassen FrontendController und BaseController kann man nicht erweitern.

Ja wenn du was änderst musst du das bei einem Update prüfen, egal ob Modul oder Template. Du kannst auch alles so lassen wie es ist dann musst du nichts prüfen.

Die Klassen FrontendController und BaseController kann man nicht erweitern.

Wo wäre dann ein guter Ort, um es im Header Template zur Verfügung zu haben?

Ja wenn du was änderst musst du das bei einem Update prüfen, egal ob Modul oder Template. Du kannst auch alles so lassen wie es ist dann musst du nichts prüfen.

Wenn ich aus dem Template heraus zusätzlich Klassen laden könnte, müsste ich den Aufwand nicht treiben

Z.B. ViewConfig wenn es überall zur Verfügung stehen soll.

Ist aber halt nicht die Aufgabe des Templates Klassen zu laden. Das Template kennt nur die Sachen die es mitbekommt, also Controller, ViewConfig, Components.

Es ist ein Klacks, aber es ist auch unnötig. Ich erweitere eine Klasse um eine Funktionalität, die in einer anderen Klasse schon exakt so zur Verfügung steht. Das kann nicht der Sinn eines Moduls sein, ein Modul sollte die Funktionalität des Shops erweitern.

Danke, das scheint zu funktionieren

Genau das ist es meiner Meinung nach. Das System, der Klasse zu sagen, zu welchem Template sie gehört statt umgekehrt, ist völlig kontraintuitiv.

Aber eben in einem anderen Controller. Ein Controller ist sozusagen untere Hierarchie, was da drin steht ist nur dort verfügbar.

Finde ich nicht. Das Template ist nur Darstellungsschicht. Es wird nicht das Template aufgerufen sondern der Controller, deshalb heißt der ja auch so. Der kann dann entscheiden ob er ein Template laden will und wenn ja welches.

Manchmal geht’s nicht anders und die Namen von Methoden ändern sich eigentlich nicht. Und wenn, dann wird dies auch bekannt gemacht.