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
Quel framworks ? Quel moteur de template ? [ par chatis ]
Bonjour, Je développe un site internet de réservation de court de tennis par internet et ma version 1 est terminée. Actuellement sur le site j'ai 150
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
php/xml/xslt [ par soolfa ]
salut a tous , svp j'ai un ensembles des fichiers .txt .( ces fichiers sont soit enregistrer dans un dossiers ,Soit les fichiers qui ont été ouvert s
php5 et moteur de template "smarty" [ par smahaneAAI ]
Bonjour tout le monde! J'ai eu un projet de la création d'un site web concernant les appelles d'offre, ce projet doit être réalisé en langage php5 et
Développement web [ par alouane2010 ]
svp , j'ai une application de gestion de controle, je veux créer une courbe pour le cout minute processus, ça bien marché, j'ai utilsé DhtmlX chart, m
Base de données avec XML.... [ par taharinfo ]
[size=300]**** Bjr a tous,[/size][size=200][/size][color=blue][/color] Quels sont les outils q je peut utiliser pour construire un site dynamiq
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
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|