Accueil > > > [PHP5] LIMÉA XSLT TEMPLATE ENGINE
[PHP5] LIMÉA XSLT TEMPLATE ENGINE
Information sur la source
Description
LXTE est un script mettant en relation un modèle de style XSLT avec un fichier de données XML. Il s'appui sur le DOM de PHP5. 1) Principe de fonctionnement Vous commencez votre site, vous concevez la page d'accueil, celle-ci, pour rester original, s'appelera 'index.php'. Cette page se compose de 2 éléments: un contenu et une 'interface publique'. Le contenu, statique ou dynamique, est construit par votre code PHP, sa mise en page sera construite par un 'template' ou 'modele'. Cette classe, documentée, va vous permettre de faire tout ceci très simplement. D'un coté votre page 'index.php' qui construira les données et de l'autre 'index.xhtml' qui sera votre 'modele d'interface'. 2) En détail LXTE va, par ses fonctionnalités, va vous permettre de construire un fichier XML regroupant les différentes informations qui seront affichées sur votre page. Ce fichier XML, associé à une feuille de style de type XSLT, sera mis en forme puis renvoyé au naviguateur 'transformé'. Le naviguateur recevra du code XHTML1.1 Strict. LXTE intègre aussi un système de cache pour eviter de devoir reconstruire le fichier de données XML à chaque chargement de votre page 'index.php' par ses visiteurs. 3) Et la suite .. Dans le zip vous trouverez un exemple concret, une page PHP affichant diverses informations dans votre naviguateur avec en son contenu, un script exposant toutes les fonctionnalités de LXTE. Si vous avez des questions au sujet de la synthaxe XML, XSLT, CSS, de nombreuses documentations sont accessibles sur le net. Au sujet du script n'hesitez pas, exprimez vous :)
Source
- 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);
- }
- }
-
- }
-
- ?>
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);
}
}
}
?>
Conclusion
Liméa XSLT Template Engine est sous licence Creative Commons. http://creativecommons.org/licenses/by-nc -sa/2.0/fr/
Historique
- 26 juillet 2006 18:02:04 :
- Ajout d'un exemple concret.
- 26 juillet 2006 19:09:48 :
- v0.1.1 - Choix possible du système d'encodage (dans la limite supportée par la librairie ICONV)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Aidez moi svp (XML-->XSLT---->php ) [ par aziza_net ]
bonjour ... voila : je travail sur des etats (les etats d'impression) sous windows avec crystal report... maintenant je dois travailler 1 partie de m
php et xslt [ par taita1 ]
salut,je voudrais savoir comment faire appel à un fichier xsl à partir de php..car j'ai fais des recherches, voici ce que j'ai trouvé comme exemple:&l
aide sur les problemes de xsl [ par jobnet ]
j'ai suivi les étapes de configuration du xsl et quelque chose de sablot mais le problèmes est le même 'Call to undefined function xslt_create()voila
Lecture à partir d'un lien hypertexte d'une page XML transformée en XSLT [ par grijalvas ]
Bonjour, J'ai réalisé une page XML. Je l'ai transformée en informations lisibles par le navigateur en créant la page XSLT(sous-ensemble du langage XS
xml et php [ par agbebe ]
salut !!!voila, je voudrais savoir que lorsqu'on utilise un fichier xml on a plus besoin de base de données pour stocker les infos ???dans tous les ca
Moteur de recherche PHP4 / XML [ par globule ]
Bonjour, Je suis à la recherche d'un moteur de recherche compatible PHP4 qui utiliserait les données d'un fichier XML (à la place d'une base de donn
Question templates [ par astuces_jeux ]
Bonjour,J'ai remarqué que l'utilisation de la class fasttemplate est compliquée. Alors je voulais savoir si on ne pouvait pas faire ça simple : foncti
Supprimer une ligne XML [ par alphacrash ]
Salut !Voici mon problème, je souhaite supprimer une ligne dans un fichier XML, j'ai ce type de fichier:<?xml version="1.0" encoding="UTF-8"?>&l
Comment faire un site web ? [ par codefalse ]
Bonjour à tous.Aujourd'hui, une question particulièrement intéressante. Elle peux paraître absurde au premier abord, mais vous allez voir que non.Comm
[Apache] RewriteRule : je suis perdu [ par Epoc22 ]
Bonjour bonjour, C'est la première fois que je touche au mod_rewrite d'Apache (avec les conditions de reécriture et tout) et là, je pête un câble Voy
|
Derniers Blogs
MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg [MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|