Bonjour à tous,

C'est mon troisième sujet ouvert ici mais depuis que je me suis plongé dans XSLT je suis confronté à pas mal de problème et malgrès le lecture de nombreux tutoriaux je ne m'en sort toujours pas. J'ai lu les posts de Xavier concernant les bonnes pratiques mais certain concept ou terme me reste étranger. Je vais donc poser tenter d'expliquer de manière général le problème auquel je suis confronté.

Je réalise des sites internet depuis quelques temps et je souhaite me creer une sorte de framework me permettant de regrouper mes class et fonction afin de minimiser le travail sur mes prochaines créations. J'ai donc décidé de séparer le code php de l'affichage grâce au couple XML - XSLT.

Avant de travaillais de la manière suivante : je créais une page principale et j'appellais en include (en essayant de les sécuriser) les pages à afficher. Mon premier problème a donc été de tenter de retranscrire ce système grace à XML/XSLT. J'ai trouvé une solution qui vas sans doute paraitre risible au yeux des pros : j'ai créé ma page principale index.xml. dans cette page j'ai ajoutér un inlude xsl d'un fichier include.xsl et j'ai mis une balise <xsl:apply-templates select="include"/>. A coté de ça j'ai creer des fichiers news.xls, bio.xsl, ... qui contienne le code xsl des page qui étaient autrefois les includes de mon site (news.php, bio.php, ...).

Quand je veux faire un affichage je procède de la maniere suivante :
- Je créé un arbre XML des résultat de mes requètes grace au php
- Si c'est des news que je veus afficher je renomme le fichier news.xml en include.xml grace à la fonction rename()
- Je crée un XSLTprocessor et je lui passe en feuille de style index.xml et fait un transformToXML de mon arbre xml.
- Grâce à rename() je redonne le nom initial au fichier.

Vous avez suivit j'espere Smiley murf

Mon système marche (dur a croire) mais je me rend bien compte qu'il est loin de d'être "propre". De plus j'ai quelques bug :
- Il y a toujours un espace entre le code source de la page généré et le haut de la fenêtre !!
- Des attributs xmlns se rajoute dans les balise div toujours dans le code source de la page générée...

Si quelqu'un pouvait me donner quelques point pour avancer de manière plus claire je lui en serait très reconnaissant. Merci d'avance.
Modifié par lanfisis (27 Jun 2006 - 19:58)
lanfisis a écrit :
je souhaite me creer une sorte de framework me permettant de regrouper mes class et fonction afin de minimiser le travail sur mes prochaines créations.
Il y a effectivement tellement de choses à mettre en commun au sein d'un site web, aussi bien de l'ordre du contenu que de la mise en page ou de la présentation, que l'idée de factorisation est une vraie bonne idée.
lanfisis a écrit :
Quand je veux faire un affichage je procède de la maniere suivante :
- Je créé un arbre XML des résultat de mes requètes grace au php
- Si c'est des news que je veus afficher je renomme le fichier news.xml en include.xml grace à la fonction rename()
- Je crée un XSLTprocessor et je lui passe en feuille de style index.xml et fait un transformToXML de mon arbre xml.
- Grâce à rename() je redonne le nom initial au fichier.
Vu de loin, je ferais 2 remarques :
- je ne vois pas l'intérêt des "renames", car il est possible de passer au processeur XSLT des paramètres, qui dans ton cas peuvent être relatifs à la page que tu dois traiter.
- il me semblerait intéressant de dissocier en 2 couches différentes le procédé de factorisation : l'agrégation de contenu d'une part, l'organisation et la présentation de ces contenus d'autre part.
Concernant la seconde remarque, le processus pourrait correspondre à quelque chose comme ça :
- l'internaute demande une url
- un modèle xml produit un mapping entre une url et un couple [ensemble des contenus utiles, ensemble des caractéristiques de présentation]
- on élabore et on rassemble les contenus utiles
- on organise la structure de la page et on ajoute la couche de présentation
- la page est prête pour l'internaute
lanfisis a écrit :
Il y a toujours un espace entre le code source de la page généré et le haut de la fenêtre
Désolé, je ne comprends pas la question.
lanfisis a écrit :
Des attributs xmlns se rajoute dans les balise div toujours dans le code source de la page générée
Ah les espaces de noms... cette notion soulève souvent des questions qui montrent qu'elle est difficile à maîtriser au début. Ces difficultés proviennent selon moi du fait d'une confusion entre 2 idées bien distinctes :
- tout noeud est obligatoirement attaché à un unique espace de noms
- un noeud peut porter un nombre indéfini de déclarations d'espaces de noms
Le rattachement d'un noeud à un espace de nom est implicite si n'est pas explicite (c'est le corollaire de cette obligation absolue). Je conseille au développeur de toujours avoir présent à l'esprit à quel espace de noms un noeud est attaché afin d'éviter les surprises.
Une déclaration d'espaces de nom correspond simplement à la définition d'une convention de nommage (association préfixe espace de noms). C'est juste pratique mais pas fondamentale.
Dans ton cas tu as des éléments qui dans un document appartiennent à l'espace de noms vide (ça c'est mauvais signe), et le processeur XSLT est obliger de rajouter xmlns="" pour éviter que cet élément hérite de l'espace de noms de son parent.

Voici un résumé sur les espace de noms.
a écrit :
- Il y a toujours un espace entre le code source de la page généré et le haut de la fenêtre !!


Regarde du côté de l'entéte de Php et des metas de Php.Il ne faut pas laisser d'espace dans ton code Php, entre tes includes et les entéte Php.

Quelques idées à prendre ou laisser.

- un code "index.php?iduser=1245fds45f4d&idpage=home&idlang=fr"
"iduser" pour une zone privée
"idpage" pour la selection de ta page
"idlang" pour la lang actuelle (A prendre en compte des les premiéres lignes de code)

Côté XSL:
un fichier "cadre.xsl" contient l'apparence du site
un fichier "commun.xsl" tout les templates génériques
un fichier "input.xsl" pour formater les entrée des formulaires

la feuille "cadre.xsl" inclu les fichiers "commun.xsl" et "input.xsl".
Pour chaque page tu peux avoir des régles spécifiques
ex: home.xsl etc....
Tout ces fichiers tu les mets dans un répertoire XSL.

Côté XML:

Ou tu codes tout en dure (fichier à plat);
ou tu généres ton code XML à partir d'une base de donnée.
Au départ il est préférable de commencer simplement. Smiley smile
Tout ces fichiers tu les mets dans un répertoire XML.
Voir pour localisation répertoire "fr" , "en" etc.....

Côté PHP:

Tu appelles le code XML et XSL en fonction de "idpage".
Passage des paramétres à XSL.

Ceci représente une vue global. Elle s'applique aussi bien pour un site Web qu'à une application en client/serveur.

Petit astuce CSS,JavaScript et XSL.

dans votre code xml.


 <prefs>
    <lang id="fr">française</lang>
    <css>css/web.css</css>
    <css>css/home.css</css>
    <js>js/web.js</js>
 </prefs>


Template XSL:

<xsl:template match="css" mode="html">
<link rel="stylesheet" type="text/css" href="{concat($path_css,.)}"/>
</xsl:template>


Avec du recule on se rends compte des possibilités. Smiley biggrin

En chercher bien on trouve toujours une solution à son probléme.
Le plus grand mérite s'est d'avoir essayer.

Bon courage Smiley cligne
Merci beaucoup pour vos réponses précise. Je n'ai pas acces à mon PC avant Lundi mais je testerai vos solutions dès que possible.
Bonjour.
J'ai également programmé un petit framework basé sur Php/XML/XSLT.
La méthode que j'ai utilisée est de charger dans le php seulement les feuilles XSL nécessaires à la page courante et de les fusionner pour faire une seule feuille de style que j'applique à mon XML.
Je n'ai pas voulu passer de paramètres à la feuille XSL. C'est ce que j'avais fait au départ mais je me retrouvais avec de gros <xsl:choose> dans mes feuilles de style, ce qui ne me plaisait pas, car je trouvais cela redondant avec le script Php qui traitais déja les même paramètres pour générer le XML.
Je me demande cependant si la fusion de documents est une bonne méthode, j'ai peur en effet que ce ne soit pas terrible au niveau des performances.