Portal > Foren > Ausschreibungssprachen und clientseitige Programmierung > HTML, XML und CSS > [XSLT] Grundlegendes zur Nutzung von XSL als Template-Engine
Antwort
 
Themen-Optionen
Alt 06.03.2007, 18:50 Nach oben    #1
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard [XSLT] Grundlegendes zur Nutzung von XSL als Template-Engine

Ich bin gerade dabei, mir ein CMS zu bauen, welches XSL als Template-Engine verwendet. Bisher verwende ich noch smarty, denke aber, dass es einen gewissen Reiz ausmacht stattdessen XSL zu verwenden. Gerade auch in Verbindung mit AJAX.

Einfachen Content mit XSL zu HTML umzuwandeln ist kein Problem,
schwierig wird es hingegen,
wenn Formulare oder ähnliches generiert werden sollen.

Bisher verwende ich HTML_QuickForm und Smarty zur dynamischen Generierung und Validierung von Formularen.
Um dies mit XSLT zu bewerkstelligen müsste ich aber doch das XSL-Stylesheet ebenfalls dynamisch per PHP generieren oder nicht?

Dies ist ein generelles Designproblem, welches mir bei der Verwendung von XSLT ständig auffällt.

Gibt es einen eleganteren Weg?
Hat jemand von euch bereits Erfahrungen in diesem Gebiet sammeln können?
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.03.2007, 19:06 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hi,
also ich habe genau keine Ahnung von XSL(T), aber sind nicht XForms für so etwas gedacht?
Weiß das jetzt nicht genau und habe auch das Halbwissen nicht kontrolliert, aber vielleicht habe ich ja richtig geraten.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.03.2007, 19:36 Nach oben    #3
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

Die XForms sind klasse, keine Frage.
Clientseitige Validierung und es werden sogar XML-Daten zurückgegeben,
aber leider unterstützt das heute kein Browser und
ein serverseitiger Prozessor, der meines Wissens für PHP momentan gar nicht existiert, wäre dann auf JavaScript angewiesen.
Die XForms werden einfach noch viel zu schlecht unterstützt, um sie schon jetzt zu nutzen, deshalb bin ich zuerst gar nicht darauf eingegangen.
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.03.2007, 19:44 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Alles klar. Da habe zumindest ich wieder etwas dazugelernt.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 11:19 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Hi.

Ich hab hier Ansätze für eine Template-Engine, die auch schon einige Funktionen unterstützt, die weiter zu entwickeln ich aber gerade nicht schaffe. Dort beutze ich XSLT, um XML-Templates in PHP-Skripte umzuwandeln (so, wie das z.B. Smarty auch vom Prinzip her macht).

Das Ganze erfüllt im Moment folgende Tests:
PHP-Code:
<?php

$a 
= array(
    
'simple' => array(
        
'<b>Test</b>''<b>Test</b>'
    
),
    
'br' => array('<br/>''<br/>'),

    
'var2' => array(
        
'<var name="{test}"/>',
        
'<?php $this->echoVar(\'{test}\');?>'
    
),

    
'condition-tag 1' => array(
        
'<if cond="test">Test</if>''<?php if($this->cond(\'test\'):(?>Test<?php endif;?>'
    
),
    
'condition-tag 2' => array(
        
'<if cond="test2">Test</if>''<?php if($this->cond(\'test2\'):(?>Test<?php endif;?>'
    
),
    
'condition-tag 3' => array(
        
'<div><if cond="test1">Test1</if><if cond="test2">Test2</if></div>''<div><?php if($this->cond(\'test1\'):(?>Test1<?php endif;?><?php if($this->cond(\'test2\'):(?>Test2<?php endif;?></div>'
    
),
    
'condition-tag 4' => array(
        
'<div><if cond="test1">Test1a<if cond="test2">Test2</if>Test1b</if></div>''<div><?php if($this->cond(\'test1\'):(?>Test1a<?php if($this->cond(\'test2\'):(?>Test2<?php endif;?>Test1b<?php endif;?></div>'
    
),
    
'condition-tag 5' => array(
        
'<if cond="test2"><span>Test</span></if>''<?php if($this->cond(\'test2\'):(?><span>Test</span><?php endif;?>'
    
),
    
'condition-attr 1' => array(
        
'<span cond="test">Test</span>''<?php if($this->cond(\'test\'):(?><span>Test</span><?php endif;?>'
    
),
    
'condition-attr 2' => array(
        
'<div cond="test2">Test</div>''<?php if($this->cond(\'test2\'):(?><div>Test</div><?php endif;?>'
    
),
    
'condition-attr 3' => array(
        
'<div><span cond="test1">Test1</span><em cond="test2">Test2</em></div>''<div><?php if($this->cond(\'test1\'):(?><span>Test1</span><?php endif;?><?php if($this->cond(\'test2\'):(?><em>Test2</em><?php endif;?></div>'
    
),
    
'condition-attr 4' => array(
        
'<div><p cond="test1">Test1a<strong cond="test2">Test2</strong>Test1b</p></div>''<div><?php if($this->cond(\'test1\'):(?><p>Test1a<?php if($this->cond(\'test2\'):(?><strong>Test2</strong><?php endif;?>Test1b</p><?php endif;?></div>'
    
),
    
'condition-attr preserve other attrs' => array(
        
'<div><p align="center" cond="test">Test</p></div>''<div><?php if($this->cond(\'test\'):(?><p align="center">Test</p><?php endif;?></div>'
    
)
);

$sPre "<?xml version=\"1.0\"?>\n";

require 
dirname(__FILE__) . '/TemplateEngine.php';

$T = new TemplateEngine;

print 
"<ul>\n";

foreach (
$a as $sTestName => $aValues) {

    
$sRes $T->parse($sPre.$aValues[0]);
    
$bEqual rtrim($sRes) === rtrim($sPre.$aValues[1]);
    
$sColor $bEqual '0f0' 'f00';
    print 
"\t<li style=\"color: #$sColor\">$sTestName</li>\n";

    if (!
$bEqual) {

print 
'<h2>Expected</h2>';
print 
'<pre>';
print 
htmlentities($sPre.$aValues[1]);
print 
'</pre>';
print 
'<h2>Result</h2>';
print 
'<pre>';
print 
htmlentities($sRes);
print 
'</pre>';
    }
}

print 
'</ul>';
(...Jaaa, ich weiß, dass es PHPUnit und SimpleTest gibt und gelobe Besserung *g)

Vielleicht ist die Herangehensweise ja eine Möglichkeit für dich.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 17:14 Nach oben    #6
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

ich verstehe nicht genau, was ich damit machen kann.
Eigentlich ersetzt du hier doch einfach die verschiedenen Tags im $a-Array durch php-Code.

Meine Idee, wäre static content von dynamic content zu trennen.
Dynamisch erzeugte Formulare sind in den allermeisten Fällen ja static content.
Und den static content erzeuge ich nur einmal, indem ich die dazugehörigen XSL-Dateien einmalig per PHP rendere.
Allerdings bräuchte ich ja dafür wieder ne Art Templateengine.
Und ne Templateengine für ne Templateengine zu verwenden ist wohl eher kein guter Stil.
Deshalb suche ich nach etwas eleganterem.
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 18:03 Nach oben    #7
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Hi.

Zitat:
Zitat von El Barto Beitrag anzeigen
ich verstehe nicht genau, was ich damit machen kann.
Eigentlich ersetzt du hier doch einfach die verschiedenen Tags im $a-Array durch php-Code.

Meine Idee, wäre static content von dynamic content zu trennen.
Dynamisch erzeugte Formulare sind in den allermeisten Fällen ja static content.
Ich verstehe dann nicht ganz, wozu du da eine Template-Engine brauchst?

Die einzelnen Felder, aus denen sich die Formulare dann zusammensetzen sind ja festgelegte Module (Widgets) und was am Ende dabei rauskommt ist dann ja das Template, das die Entwickler/Designer dann nochmal anpassen können.

Natürlich lässt sich auch aus einer in XML abgelegten Datenstruktur per XSL so ein Formular bauen und dazu bräuchtest du ja auch kein "dynamisches" XSLT, da die Regeln ja fix sind: Aus einem Knoten property mit Attribut type="varchar" wird ein Input-Knoten vom Typ text ... oder so. Und z.B. diesen Input-Tag verpasst du dann eben ein value="{User.name}" oder ein value="<?php echo $this->name; ?>" oder wie auch immer deine eigenlichen Templates dann aussehen müssen.

Zitat:
Und den static content erzeuge ich nur einmal, indem ich die dazugehörigen XSL-Dateien einmalig per PHP rendere.
Allerdings bräuchte ich ja dafür wieder ne Art Templateengine.
Und ne Templateengine für ne Templateengine zu verwenden ist wohl eher kein guter Stil.
Deshalb suche ich nach etwas eleganterem.

Ich glaub, ich habs immer noch nicht ganz geschnallt. Aber hört sich eben so an, als willst du irgendwie aus einer Datenstruktur dynamisch Templates (Formular-Templates) erstellen und die Vorstellung hast, du müsstest aus der Datenstruktur gleich das statische HTML erzeugen. Aber, es spricht doch nichts dagegen, hier in zwei Schritten vorzugehen, also erstmal (z.B. mit XSL) die Formular-Templates zu erzeugen und dann "just in time" oder mit nochmaligem Cache dazwischen das fertige Formular zu erzeugen. Jedes RAD-Framework mach das doch genau nach dem Muster.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 19:09 Nach oben    #8
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

ich glaub wir meinen genau das gleiche
ok dann werd ichs wohl so machen.
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kleine Fragen zur IT[X] Template Engine ex³ PEAR, PECL und Frameworks 0 18.07.2006 14:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:18 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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 32 33 34 35 36 37 38 39 40 41 42 43 44