Für dynamische Seitenelemente wie
- seitenspezfische Menüs, wie auf www.openrat.de
- Inhalte, die aus externen Datenbanken kommen
- sonstige Inhalte, die zum Zeitpunkt der Seitengenerierung erstellt werden
Dazu muss eine Datei im Ordner "dynamicClasses" angelegt werden. Diese muss eine PHP-Klasse beinhalten, die folgenden Konventionen unterliegt.
- Die Klasse muss dem Dateinamen entsprechen, Beispiel: Die Datei heißt "Stellenanzeige.class.php" und enthält die Klasse "Stellenanzeige".
- Die Klasse muss von "Dynamic" erben.
- Es wird die Methode "execute()" überschrieben. Diese wird durch das CMS bei der Seitengenerierung aufgerufen.
- Um etwas in die Ausgabeseite zu schreiben, wird die Instanzmethode output() aufgerufen.
- Es darf nicht auf die Standardausgabe geschrieben werden! (Kein "echo ..."-Befehl!)
Beispiel
In unserem Beispiel einer Stellenanzeige würde die Datei "Stellenanzeige.class.php" dann so aussehen:
Aufruf der dynamischen Klasse
Um diese Klasse zu nutzen, muss in der Seitenvorlage ein Element vom Typ "Dynamisch" erstellt werden. In den Eigenschaften dieses Elementes wird "Stellenanzeige" ausgewählt. Anschließend muss das Element natürlich noch in den Template-Quellcode aufgenommen werden.
Bei der Seitengenerierung ruft das CMS die execute()-Methode auf und der Inhalt in die Ausgabe übernommen.
Aktuellen Seitenkontext verwenden
In der Methode exec() kann man über $this auf zahlreiche Variablen zurückgreifen, z.B. kann man mit $this auf das aktuelle Seitenobjekt zugreifen. Es darf jedoch nur lesend auf diese Objekte zugegriffen werden!
Parameter
Das CMS kann alle Instanzvariablen (wie das Attribut $id im o.s. Beispiel) vor dem Aufruf füllen.
In den Eigenschaften des Template-Elementes werden alle Attribute angezeigt und sind mit einem beliebigen Wert belegbar.
Verwendung als Makro
Alle dynamischen Klassen können bei Verwendung der Wiki-Notation in Textelementen direkt als Makro eingebunden werden:
<<name variable=wert>>
Beispiel Youtube
<<youtube id=abcdef123>>
bindet das Youtube-Video mit der Id "abcdef123" in die Ausgabeseite ein. Dabei wird die Klasse Youtube.class.php instanziiert und die Instanzvariable $id mit dem Wert abcdef123 gefüllt.