Soyez le premier à donner votre avis sur cette source.
Vue 8 433 fois - Téléchargée 502 fois
INDEX.PHP - Fichier principal gérant les données à afficher <?php $pageCopyright = '©2006 Christophe LEMOINE'; $pageTitle = 'Exmple concret - Une liste d\'articles du 2eme au 7eme'; $pageKeywords = 'xml,xslt,xsl,super,titre'; $pageDescription = 'Une liste d\'articles du 2eme au 7eme'; require_once ('class/class.template.php'); $xslPath = './tpl/default'; $xmlFileName = basename ($_SERVER['PHP_SELF'], '.php'); $t = new TemplateXSLT ( $xmlFileName, // nom de cette page PHP './', // chemin d'accès au fichier XML $xslPath, // chemin d'accès au modèle XSLT (.xsl) false, // true = forcer à recréer le cache, false = gestion utomatique 3600 // delai en secondes entre chaque recréation du cache ); if (!$t->cached) // si le cache n'est pas utilisé alors on le recréé { $t->Open (); // préparation du document $t->appendElement ('tplpath', ($xslPath.(substr ($xslPath, strlen ($xslPath), 1) == '/' ? '' : '/'))); $t->appendElement ('url', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); $t->appendElement ('generator', 'Liméa XSLT Template Engine'); $t->appendElement ('copyright', $pageCopyright); $t->appendElement ('title', $pageTitle); $t->appendElement ('keywords', $pageKeywords); $t->appendElement ('description', $pageDescription); $t->appendComment ('Construction de la liste des articles'); $t->loadPluginFunction ('appendArticles', null); $t->Close (); // ne jamais oublier! enregistre les modifictions apportées } $t->ShowXHTML (); // retourne le modèle XSL sous forme d'une page XHTML ?> STYLE_INDEX.XSL - Le modèle XSL de la page à afficher <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="{_OUTPUT_ENCODING_}" indent="yes" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/xml, charset={_OUTPUT_ENCODING_}"/> <title><xsl:value-of select="page/title"/></title> <meta name="keywords" content="{page/keywords}"/> <meta name="description" content="{page/description}"/> <meta name="author" lang="fr" content="Christophe LEMOINE"/> <meta name="reply-to" content="lemoine.christophe@yahoo.fr (Christophe LEMOINE)"/> <meta name="identifier-url" content="{page/url}"/> <meta name="copyright" content="{page/copyright}"/> <meta name="generator" content="{page/generator}"/> <meta name="date" content="{page/infos/created}"/> <meta name="robots" content="all"/> <meta name="revisit-after" content="7"/> <link href="{page/tplpath}style.css" rel="stylesheet" type="text/css"/> </head> <body> <h2><xsl:value-of select="page/title"/></h2> <p>Le fichier XML comporte 10 articles mais pourtant votre template XSLT en affiche que 6, du 2 au 7 compris!</p> <xsl:for-each select="page/articles/article"> <xsl:variable name="num"> <xsl:number level="any" from="/page/articles"/> </xsl:variable> <xsl:if test="$num > 1 and $num < 8"> <p class="article"> <div class="maxi"> <xsl:value-of select="title"/> </div> <div class="mini"> écrit par <b><xsl:value-of select="author"/></b> le <b><xsl:value-of select="date"/></b>, lu <b><xsl:value-of select="numread"/></b> fois </div> <div class="desc"> <xsl:value-of select="description"/><br /> </div> </p> </xsl:if> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> XSLT_PLUGIN.INC - Le fichier contenant la fonction perso pour afficher une liste d'articles <?php class xslt_plugin { function __construct () {} function __destruct () {} function appendArticles ($xmlObj, $param) { $artlist = array ( array ('titre 1', 'description 1', '26/07/2006', 'auteur 1', 5), array ('titre 2', 'description 2', '26/07/2006', 'auteur 2', 1), array ('titre 3', 'description 3', '26/07/2006', 'auteur 3', 16), array ('titre 4', 'description 4', '26/07/2006', 'auteur 4', 9), array ('titre 5', 'description 5', '26/07/2006', 'auteur 5', 4), array ('titre 6', 'description 6', '26/07/2006', 'auteur 6', 0), array ('titre 7', 'description 7', '26/07/2006', 'auteur 7', 2), array ('titre 8', 'description 8', '26/07/2006', 'auteur 8', 1), array ('titre 9', 'description 9', '26/07/2006', 'auteur 9', 52), array ('titre 10', 'description 10', '26/07/2006', 'auteur 10', 7), ); $nodes = $xmlObj->getElementsByTagName ('page'); foreach ($nodes as $node) { $articles = $xmlObj->createElement (utf8_encode ('articles')); foreach ($artlist as $a) { $artone = $xmlObj->createElement (utf8_encode ('article')); $a_titre = $xmlObj->createElement (utf8_encode ('title'), utf8_encode ($a[0])); $artone->appendChild ($a_titre); $a_description = $xmlObj->createElement (utf8_encode ('description'), utf8_encode ($a[1])); $artone->appendChild ($a_description); $a_date = $xmlObj->createElement (utf8_encode ('date'), utf8_encode ($a[2])); $artone->appendChild ($a_date); $a_author = $xmlObj->createElement (utf8_encode ('author'), utf8_encode ($a[3])); $artone->appendChild ($a_author); $a_numread = $xmlObj->createElement (utf8_encode ('numread'), utf8_encode ($a[4])); $artone->appendChild ($a_numread); $articles->appendChild ($artone); } $node->appendChild ($articles); } } } ?>
26 juil. 2006 à 11:01
c'est pas mal, très bonne idée, bien codée.
Mais ce que je trouve dommage, c'est qu'on se retrouve à créer un template XSL comme un autre XSL. Pour les débutants, ce n'est pas idéal de balancer des value-of select...et cie.
Ton système gagnerait en ergonomie s'il permettait d'utiliser des variables plus habituelles, comme {COMMENT_SECTION} par exemple. Et des balises prédéfinies.
Ensuite, tu fixes l'encodage, ce qui est dommage. Ce devrait être une option de ta classe.
Précise aussi que ta classe nécessite XSLTProcessor, parce que si DOM est souvent chargé sur un serveur PHP5, c'est moins souvent le cas de XSLTProcessor.
Sinon, je n'ai pas compris à quoi servait ton xslt_plugin, mais bon, je n'ai pas vraiment eu le temsp d'approfondir ton code.
Pas mal du tout, donc :-)
26 juil. 2006 à 16:22
Pour la simplification des value select, c'est une bonne idée. Cela m'embete de toucher au modele XSLT, car à la base il devait etre totalement independant.
Cette independance couplé au fichier xslt_plugin sont la pour permettre a tout un chacun de creer son propre site web. Ce n'est pas un moteur de template pur, LXTE permet de construire un site web en créant des interface qui afficheront les informations de bases et les infos custum.
Exemple, tu fais ton site via LXTE, dans ce site tu vx integrer un systeme d'articles, simple, tu codes ta fonction PHP dans le fichier xslt_plugin, et la gestion de l'a&ffichage (ordre d'apparence, nombre d'article dans une page, etc) tu la frabrique via le modele XSLT !
LXTE fait parti d'un esemble de fonctionnalité qui seront regroupée au sein d'un framework utilisable pour la conception sites (portails, blog, galleries photos, etc !)
LXTE est un peu le core du framework.
Plus tard des fonction predefinie, permetteront d'acceder a telle ou telle fonctionnalité, des constantes permetteront de connaitre telle ou telle informations.
LXTE est un début. Il ne sera pas fait pour un debutant en creation de site web mais pour des developpeurs PHP souhaitant realisé un site dynamique respectant les standards sans toutefois tout devoir creer de A a Z. En clair ceci est la base d'un systeme propre et extremement modulaire!
26 juil. 2006 à 16:25
Cet exemple sera contenu dans le zip si place il y a sinon sera dans la partie code de cette fiche.
26 juil. 2006 à 17:09
on reprend...je connais plutôt bien le XML et XSL, pars de ce principe :-)
Donc, concernant l'encodage, ma question était : et si j'ai envie de passer en ISO-8859-1 ... ? Par exemple ?
Ensuite, mon idée n'était pas de toucher au XSL (il faut garder ses possibilités immenses), mais de coupler ça au système de templating habituel.
Ok, le xslt_plugin est là pour jouert avec registerPHPFunctions, quoi.
Pour l'idée d'un framework, ok...bien :-) Mais y a de la concurrence. Si tu ne connais pas, vas jeter un oeil à XMLRad.
26 juil. 2006 à 18:18
Pour le systeme de templating je me penche sur le principe, mais pour t'avouer, j'ai beaucoup de mal à realiser un parser qui gererai des conditions, des boucles et etc! donc a voir, je conserve ton idee.
XMLRad .. je ne connaissais pas et effectivement, ca mal l'air plutot exelent!
Merci pour tes remarques. Si tu as d'autres idees, reproches n'hesite pas.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.