24. September 2007 XSLT als Template Engine in PHP - Teil 6
Tags: PHP, Template Engine, XML & Co, XSLT
Die Trennung zwischen Applikationslogik und Präsentation steht beim Einsatz von Template Engines im Vordergrund. Oftmals ist es aber dennoch nötig oder geschickt im Template selbst Informationen aus der Applikationslogik zu erhalten. Die XSL–Extension bietet eine schöne Möglichkeit PHP–Funktionen im XSL–Template aufzurufen.
PHP in XSLT
Konzentrieren wir uns zuerst auf das serverseitige PHP–Script. Hierzu werde ich das Beispiel aus Teil 4 ausbauen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php class MyClass { public static function get() { return 'Hello world from class!'; } } function myFunc() { return 'Hello world from function!'; } $xp = new XsltProcessor; $xp->registerPHPFunctions(); $xsl = new DOMDocument; $xsl->load('home.xsl'); $xp->importStylesheet($xsl); $xml = new DOMDocument; $xml->load('home.xml'); $output = $xp->transformToXML($xml) or die('Transformation error!'); echo $output; ?> |
Die wesentliche Neuerung in diesem Script ist der Aufruf »registerPHPFunctions()« in Zeile 14. Dieser Aufruf registriert die PHP–Funktionen beim XSLT Prozessor. Zu Beginn des Scripts habe ich noch eine einfache PHP–Funktion und eine statische Methode hinzugefügt. Beide können wir später im Stylesheet aufrufen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" exclude-result-prefixes="php"> <xsl:output method="xml" encoding="UTF-8" indent="yes" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" omit-xml-declaration="yes" /> <xsl:include href="root.xsl" /> <xsl:template match="/home"> <h2><xsl:value-of select="title" /></h2> <p><xsl:value-of select="text" /></p> <p> Das aktuelle Datum: <xsl:value-of select="php:function('date', 'd.m.Y')" /> </p> <p><xsl:value-of select="php:function('myFunc')" /></p> <p><xsl:value-of select="php:function('MyClass::get')" /></p> </xsl:template> </xsl:stylesheet> |
Ganz wichtig ist es im Stylesheet–Tag die Zeilen 6 bis 7 hinzuzufügen. Ansonsten kann der XSLT Prozessor mit unseren PHP aufrufen nichts anfangen. In Zeile 24 steht der erste Aufruf einer PHP–Funktion. Hier rufen wir »date()« auf. Diese Funktion ist standardmäßig in PHP enthalten. Das zweite Argument in diesem Aufruf ist das erste Argument der date–Funktion. Hier könnten auch weitere Argumente folgen aber diese Funktion benötigt nur dieses. In den folgenden Zeilen rufen wir unsere eigene Funktion und die statische Methode auf.
Fazit
Ob man diese PHP–Aufrufe nun einsetzen möchte bleibt jedem selbst überlassen aber es gibt durchaus sinnvolle Einsatzmöglichkeiten. Ich rufe meist eine statische Klasse auf, welche mir dynamische Links generiert. Dadurch wird die Trennung zwischen Logik und Präsentation sogar noch schärfer. Die in diesem Artikel beschriebenen Methoden dürften einige Smarty–Entwickler an die dort vorhandenen »custom functions« erinnern. Durch PHP in XSLT erhöht sich die Flexibilität noch einmal um ein Vielfaches
Das vollständige Beispiel aus diesem Beitrag gibt es hier zum Download:
Im nächsten Beitrag zu dieser Reihe möchte ich eine elegante Möglichkeit der Internationalisierung einer Website in XSLT vorstellen.
weiter zum siebten Teil dieser Beitragsreihe »
Ähnliche Artikel
Der Beitrag wurde am Montag, den 24. September 2007 um 10:19 Uhr veröffentlicht und wurde unter PHP, XML & Co abgelegt. du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Das ist einer der coolsten Beiträge zum Thema PHP5 + XSL(T) die ich bisher gefunden habe; für Einsteiger in die Materie einfach verständlich, einleuchtende Beispiele und nicht zuletzt der komfortable Beispiel-Code-Download sind einfach spitze!
Thank you!