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
TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice CRéATION D'UNE BASE DE DONNéE SOUS SQL AZURECRéATION D'UNE BASE DE DONNéE SOUS SQL AZURE par junarnoalg
Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.
SQL Azure est avant tout un service d'hébergement de base de données relationnelles construit sur SQL Server. Il permet aux entreprises d...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|