»render()
«
muss immer XHP-Objekte zurückgeben. Möchte man nur einen String zurückgeben, muss man die eigene Klasse von der Oberklasse
»x:primitive
«
ableiten. Diese Klasse ist jedoch explizit nur für "Low-Level-Elemente" gedacht, wie etwa die HTML-Elemente
»a
«
oder
»h1
«
, die tatsächlich das Markup beziehungsweise Tags ausgeben müssen. Im Gegensatz zu
»x:element
«
müssen von
»x:primitive
«
abgeleitete Klassen die Methode
»stringify()
«
implementieren, die wiederum den String zurückliefert, der auch später in der Ausgabe landet.
Listing 7
zeigt ein Beispiel für ein Element namens
»zutat
«
. Dessen Methode
»stringify()
«
gibt einfach nur den String
»<div>Mehl</div>
«
aus.
Listing 7
Ableitung von :x:primitive
Sowohl Listing 6 als auch Listing 7 scheren sich nicht um ihre Kindelemente. In folgendem Fall:
echo <admin:zutat> <div>Zucker</div> </admin:zutat>;
würde weiterhin nur wie in
Abbildung 7
die Ausgabe
»Mehl
«
erscheinen.
»<div>Zucker</div>
«
ist hier ein Kindelement von
»admin:zutat
«
, das dieses aber nicht beachtet. Daher muss in
»stringify()
«
noch eine Schleife her, die alle Kindelemente durchläuft und in die Ausgabe einbaut. Diese Schleife zeigt
Listing 8
. Sie nutzt die Methode
»getChildren()
«
, die alle Kindelemente des Objekts zurückgibt. Sie steht auch allen Klassen bereit, die von
»x:element
«
abgeleitet sind.
Listing 8
Auswertung der Kindelemente
Besitzt ein Element Attribute, kann man sie einfach wie in
Listing 9
nach dem Schlüsselwort
»attribute
«
auflisten. In
Listing 9
erhält das Element
»admin:auto
«
genau zwei Attribute. Das erste heißt
»marke
«
, nimmt Strings auf und ist mit dem Wert
»Ferrari
«
vorbelegt. Steht ein
»@require
«
hinter dem Attribut-Namen, so ist die Angabe des Attributs Pflicht. Sein Kollege
»farbe
«
darf nur die zwei möglichen Werte
»blau
«
und
»rot
«
aufweisen.
Listing 9
Definition von Attributen
An die in der Zeile festgelegten Attribute gelangt man über die Methode
»getAttributes()
«
, die man dann beispielsweise wie in
Listing 9
innerhalb von
»render()
«
in eine Schleife ausgeben kann.
»getAttributes()
«
kennen auch alle Klassen, die von
»x:primitive
«
abgeleitet sind.