begin process at 2010 03 19 12:57:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > MOTEUR DE TEMPLATE XSL UTILISANT LA CLASSE XSLTPROCESSOR ET DOMNODES (AVEC FILS)

MOTEUR DE TEMPLATE XSL UTILISANT LA CLASSE XSLTPROCESSOR ET DOMNODES (AVEC FILS)


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :xsl, xml, xslt, xsltprocessor, transform Niveau :Initié Date de création :12/09/2007 Date de mise à jour :12/09/2007 02:04:07 Vu / téléchargé :3 079 / 154

Auteur : codefalse

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Bonjour tout le monde !
Je me lance dans une tentative de moteur de template en xml/xsl(t), car légion sont les moteurs de template en mode parseur, mais peu sont ceux en mode xml/xsl :)

Pour instancier la classe, vous avez plusieurs paramètres possibles :
* le premier, permet de choisir le nom de l'élément racine (de base : root)
* le second permet de choisir l'adresse du cache (et oui ! ya un cache :))
* les deux suivants permettes de choisir la version et l'encodage de l'élément XML

Alors, une fois l'élément instancié, il est possible d'ajouter des elements xml de deux manières :
soit par la méthode append (TagName, Content, bCDATA), qui ajoute l'élément xml TagName, contenant Content, en mode CDATA si bCDATA est à true
ou par la méthode appendXml (DOMDocument oDDXml), qui ajoute l'élément DOMDocument oDDXml
La méthode appendXml est la plus agréable à utiliser, car vous pouvez retourner un objet domdocument depuis vos autres classes, et les imbriquer à la suite dans le moteur de template

Une fois le travail terminé, vous n'avez plus qu'a faire
$objetXSLT->transform ('Adresse/nomdufichier.xsl', bShow);

la fonction transform va vérifier dans le cache (si on utilise le cache (parametre $objetXSLT->useCache à true (défault : true))) si le fichier existe
(le fichier est encodé de cette manière sha1($sel.$fileName), biensur, le sel est modifiable : $objetXSLT->salt))

Mais j'ai opté pour une autre manière plus subtile pour la gestion du cache.
Au lieu de s'amuser avec la date du cache, au risque de ne pas être tout de suite à jour, je suis parti sur une autre méthode :
je met l'élément xml, suivi d'un délimiteur, suivit du document xsl transformé.
Quand j'ouvre le fichier en cache, je le découpe par rapport au délimiteur. Si le xml (première partie) et identique à mon xml courant, alors je n'ai pas besoin de transformer le fichier xsl, je n'ai juste qu'à retourner la deuxieme partie du fichier. Sinon je le transforme.

L'avantage de cette méthode, c'est que le cache se gere indépendement. Le désavantage, c'est que j'utilise une fonction d'acces et de lecture au fichier, fonctions en plus comparé une simple vérification de version de fichier.

Voici les propriétés que vous pouvez modifier
$XSLTransform->delimiter = 'Le délimiteur qui sépare le XML du XSLTransformé';
$XSLTransform->salt = 'Le sel qui permet l\'encodage du nom du fichier';
$XSLTransform->extension = 'L\'extension du fichier en cache (sans le point)';
$XSLTransform->useCache = true/false; (Si on utilise le cache ou pas (ca ne sert à rien dans le cas ou, par exemple, on affiche l'heure sur la page en passant par un xml :p)
$XSLTransform->cachePath = 'L\'adresse du cache/';


$XSLTransform->transformOnClose = true/false; (Si on transforme le document à la fermeture (__destruct))
// Dans ce cas, la variable
$XSLTransform->XslPathFile doit contenir l'adresse et le nom du fichier xsl
--> Ces deux derniers paramètres seront remplis lors de l'appel de la fonction
$XSLTransform->transformOnClose ('Adresse et nom du fichier xsl');
(par contre ca ne marche pas, la fonction is_file ne trouve pas le fichier alors qu'il existe, (ca marche pour ->transform et pas pour ca), je ne sais pas pourquoi ! :/)

Voila je vous ai tout dit, je vous laisse voir un exemple, et le code est dans le zip, bien entendu :)

Source

  • <?php
  • // On inclu la classe de traitement
  • require_once ('view/xsltransform.class.php');
  • // On l'instancie
  • $xslt = new XSLTransform ('page');
  • // On prépare un object DOMDocument
  • $oDom = new DOMDocument ();
  • $bibli = $oDom->createElement ('bibli');
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste1'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre1'));
  • $bibli->appendChild ($rootNode);
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste2'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre2'));
  • $bibli->appendChild ($rootNode);
  • $rootNode = $oDom->createElement ('mp3');
  • $rootNode->appendChild ($oDom->createElement('artiste', 'artiste3'));
  • $rootNode->appendChild ($oDom->createElement('titre', 'titre3'));
  • $bibli->appendChild ($rootNode);
  • $oDom->appendChild ($bibli);
  • // Objet qui sera du type <bibli><mp3><artiste>xxx</artiste><titre>yyy</titre></mp3><mp3>...</mp3>....</bibli>
  • // (pour l'exemple :) )
  • // On l'ajoute à notre objet
  • $xslt->appendXml ($oDom);
  • // Et on le transforme
  • echo $xslt->transform ('test.xsl');
  • // On peux aussi faire $xslt->transform ('test.xsl', true);
  • // Ce qui affichera tout seul le résultat
  • ?>
<?php
// On inclu la classe de traitement
require_once ('view/xsltransform.class.php');

// On l'instancie
$xslt = new XSLTransform ('page');

// On prépare un object DOMDocument
$oDom = new DOMDocument ();
$bibli = $oDom->createElement ('bibli');

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste1'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre1'));
$bibli->appendChild ($rootNode);

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste2'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre2'));
$bibli->appendChild ($rootNode);

$rootNode = $oDom->createElement ('mp3');
$rootNode->appendChild ($oDom->createElement('artiste', 'artiste3'));
$rootNode->appendChild ($oDom->createElement('titre', 'titre3'));
$bibli->appendChild ($rootNode);

$oDom->appendChild ($bibli);
// Objet qui sera du type <bibli><mp3><artiste>xxx</artiste><titre>yyy</titre></mp3><mp3>...</mp3>....</bibli>
// (pour l'exemple :) )

// On l'ajoute à notre objet
$xslt->appendXml ($oDom);


// Et on le transforme
echo $xslt->transform ('test.xsl');

// On peux aussi faire $xslt->transform ('test.xsl', true);
// Ce qui affichera tout seul le résultat
?>

 Conclusion

N'hésitez pas à me proposer des modifications, des optimisations, je suis à votre écoute :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 septembre 2007 02:04:07 :
Rajout d'informations :)

 Sources du même auteur

[PHP5] MULTI-THREADING : ACCÉLÉRATION DU TEMPS DE TRAVAIL D'...
Source avec Zip GESTIONNAIRE DE MODÈLES SQL
Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL
Source avec Zip CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"
[PHP5] - CLASSE D'UPLOAD

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip AJOUT D'UN RENDEZ-VOUS DANS UN CALENDRIER EXCHANGE 2003 par SachaWolf
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip [PHP5] LIMÉA XSLT TEMPLATE ENGINE par lumesh
Source avec Zip [PHP5] XML MENU par malalam
Source avec Zip SITEMAP AU STANDARD NNS 1.0 par gorgonite

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 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 xml & xsl [ par Teclis01 ] Bonjour J'ai un petit soucis que je ne sais pas comment m'y prendre pour le régler... Je vous explique :)J'ai des noeuds xml qui ressemble à ceci ...& Xml et Xsl ... [ par Teclis01 ] Bonzour ça fait un ptit moment que je me prend la tête et je suis sur que c'est pour pas grand chose alors je vais vous expliquer mon soucis j'ai un f 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 probleme fatal error call undefined function [ par ad102 ] Bonjour Voila mon probleme : lorsque je fais l'appel d'une fonction dans mon programme celle-ci n'est pas reconnue alors que je pense&nbsp;l'avoir bie Problème génération tableau après avoir parsé mon XML [ par Akita95 ] Bonjour à tous,Je sollicite votre aide car je suis dans une impasse et j'ai un problème :( Après avoir longtemps cherché, sur le net et sur ce site, j Lecture fichier xml avec style xsl [ par mnou ] mnou Bonjour tout le monde j un probléme xml Expliquant:j crée un fichier xml nommé emploi.xml le probléme qu'il ne récuperé le feuille xsl mon code e Transformation XSL [ par sheeana_kt ] Bonjour à tous,Je suis en train de refondre mon site et je souhaite utiliser la techno XML/XSL. L'idée est d'utiliser le XML comme "bus" d'information


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales