[Templates] Öffentlich zugänglich = sinnvoll?

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

[Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von MrNiceGuy » 15.03.2011, 18:42:15

Moin!

Ich sitze gerade an einem etwas größeren Projekt, für das ich schon etliche TagLibs geschrieben habe und dabei ist mir aufgefallen, dass man auf Templates lediglich innerhalb des DocumentControllers zugreifen kann. Grundsätzlich kann ich diese Vorgehensweise auch verstehen, aber wäre es eventuell mit der Struktur vereinbar dies auch von "außen" nutzbar zu machen, ohne dabei gleich eine Vererbung der Klasse Page() anlegen zu müssen? Grund hierfür: Ich finde es umständlich immer erst für jedes Template, aus denen man lediglich ein paar html:template-Elemente verwenden möchte, komplett einen DC zu schreiben, dem man erst noch umständlich über ein Model oder über die getRootDocument()-Methode die Parameter übergeben muss, die er letztendlich braucht. Einfacher wäre es, wenn ich einfach mittels folgendem Code an die Templates herankäme und die Verwendung dabei gleich bliebe:

Code: Alles auswählen

$oPage = new Page();
$oPage->loadDesign ('namespace', 'template');
$oTemplate = $oPage->getTemplate ('templatename');
// ... 
Oder widerspricht das in irgendeiner Weise der gewünschten Struktur des APF?
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von dr.e. » 15.03.2011, 20:42:24

Hallo Lutz,

geht es dir um die transfomierte Ausgabe eines Templates oder dessen DOM-Element (sprich Auslagerung von Templates)? Letzteres kannst du über den <core:appendnode />-Tag realisieren. <html:template />-Knoten direkt ausserhalb des DOM zuzugreifen ist nicht Teil des Konzeptes des APF. Das macht aus meiner Sicht auch keinen Sinn, da ein DOM-Element immer den Baum als Umfeld benötigt - zumindest einen Root-Knoten wie Page.
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von MrNiceGuy » 16.03.2011, 06:41:35

Die Append-Node-Variante ist mir leider etwas zu statisch, weshalb ich eine andere Lösung gesucht habe. Ich will hierbei auf das DOM-Element zugreifen und den Inhalt für mich nutzen, dabei ist allerdings das Template variabel, weshalb das so nicht einfach mal eben so klappt :(

Aber du hast mich gerade auf eine andere Idee gebracht: Eventuell kann ich im aktuellen Objekt den Inhalt des Templates laden und den momentanen Content überschreiben, damit müsste ich dann die Templates eigentlich zur Verfügung haben!? Ich teste das mal.

Edit: OK, es funktioniert nicht. Ziel war es einfach den Content des TagLibs zu überschreiben, indem man die Methoden __loadContentFromFile direkt im TagLib dann aufruft, um das passende Template zu laden, mit __extractTagLibTags() eben jene zur Verfügung zu stellen und dann mittels $this->__getTemplate() zu arbeiten. Dummerweise leitet das TagLib von Document ab und ich weiß nicht, inwiefern man da "mal eben so" eine Instanz aus Page draus machen kann!? :(

Edit 2: Hmm... Ich habe gerade festgestellt, dass es garnicht die Klasse "Page" ist, die die Methode __getTemplate beherbergt, sondern base_controller... Schöner Mist, muss ich die Methode also am Besten selber implementieren? *kratzamkopf*
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von Megger » 16.03.2011, 08:46:08

Kannst du mal ein Beispiel geben, waum coe:appendnode zu statisch ist?
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
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von MrNiceGuy » 16.03.2011, 08:54:26

Es ist insofern zu statisch, als dass man namespace und template direkt angeben muss, ich hier aber wählen können will. Außerdem arbeite ich innerhalb eines TagLibs, da würde mir appendnode leider nicht helfen, da mir hier die Methode getTemplate() ebenfalls nicht zur Verfügung steht (TagLibs sind von Document abgeleitet und nicht von base_controller).

Es ist halt unschön dafür extra einen DocumentController schreiben zu müssen, dem man erst die Daten mitgeben muss - in meinen Augen ein unnötiger Overhead, da ich auch innerhalb eines TagLibs Template-Elemente nutzen wollen würde... :( Immerhin regeln TagLibs ja die Ausgabe von HTML-Code und wenn ich dann keine Templates nutzen kann ist das ganzschön doof!?
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von dr.e. » 17.03.2011, 00:04:35

Irgendwie verstehe ich noch nicht ganz was genau du suchst. Innerhalb einer Taglib kannst du doch ein beliebiges Template-File laden (muss nicht statisch übergeben werden) und nach der Analyse-Phase auf den kompletten Sub-Baum zugreifen. Wenn im Sub-Baum <html:template />-Tags enthalten sind, ist es ein Kinderspiel diese zu beziehen und zu verwenden wie du es in einem Controller gewohnt bist. Schau dir mal die Diskussion unter de/viewtopic.php?f=5&t=592#p5486 an, ich denke damit kannst du sicher etwas anfangen.

Klar hast du die Methode __getTemplate() in einer Taglib nicht, da das nicht speziefisch für eine solche ist (sondern nur eine convenience Methode für den Controller), aber du hast mit der Variable $this->__Children bzw. mit $this->getChildren() und der Methode $this->getParentObject() Zugriff auf den kompletten Baum. Wenn du möchtest, kannst du sogar eine Logik implementieren, dass das Kind in zweiter Ebene zu deinem aktuellen Tag nur dann tranformiert wird, wenn es 12 Uhr ist. :D

In deinem Fall reicht es IMHO aber einen Zugriff auf die Kinder zu gewähren und dort die Inhalte gesteuert durch Templates auszugeben. Ist es das, was du suchst?
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von MrNiceGuy » 17.03.2011, 08:49:44

OK, also müsste ich im Grunde nur die Methode getTemplate() selber definieren? Dann teste ich das mal aus, wäre ja einfacher, als die aktuelle Lösung über den DocumentController :)

Danke schonmal für den Gedanken-Anstoß!
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: [Templates] Öffentlich zugänglich = sinnvoll?

Beitrag von dr.e. » 19.03.2011, 21:25:28

Korrekt. Deine Taglib muss - allgemein gesprochen - alle Funktionalitäten beinhalten, um auf das umliegende DOM zuzugreifen. Im APF selbst ist dort keine Methode enthalten, weil ich ja nicht weiß, was genau du in deinem DOM haben wirst.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast