par
ramy » 09 mai 2007, 19:51
Bonjour,
je suis en train de modifier le systeme de template employé sur mon site pour le rendre plus flexible. Apres une petite recherche, j'ai décidé de préférer un systeme basé sur simplexml plutot que d'utiliser des transformation xsl que je juge trop gourmande en ressource sans systeme de cache ou qu'un systeme de template plus classique type smarty, pas assez flexible pour ce que je veux faire.
La méthode commence donc par parser un fichier xml pour le convertir en object simplexml. Ensuite un série de modification sont opérées à l'objet ainsi créer (création, modification ou suppréssions de noeux...). puis le rendu est obtenu via la méthode asXML() de simplexml.
Je trouve le résultat plutot probant mais je rencontre néanmois un probleme pour remplir le dernier point du cahier des charges : L'objectif est d'appliquer une méthode à tous les derniers elements de l'object simplexml. Je pense qu'un exemple sera plus clair :
Code : Tout sélectionner
[b]Le fichier parsé : [/b]
<html>
<head>
<title>about:blank</title>
</head>
<body>
<div id="tete">
<form id="recherche" name="recherche" action="." method="post">
<input type="text" name="q"/>
<input type="submit"/>
</form>
</div>
<div id="contenu">
<h1>about:blank</h1>
</div>
[b]La méthode : [/b]
<?php
function __construct() {
$this->xml = $this->format(simplexml_load_file($this->tpldir.$this->tpl.$this->tplext));
$this->xml->head->title .= ' | Le syndrome de la page blanche';
array_walk_recursive($this->xml,array($this,'format'));
$this->xml = $this->xml->asXML();
}
function format($t,$v) {$this->xml->$t = htmlentities($v);}
?>
Ici la méthode format() est censée remplacer tous les derniers éléments de l'objet xml par leur equivalent en entitées html. Malheureusement, array_walk_recursive appel correctement la méthode mais ne lui permet pas de modifier le dit élément puisque $t fait referece à l'objet de maniere relative et non absolue. Je continue de rechercher un equivalent de array_walk_recursive me permettant cela. J'ai aussi pensé à convertir l'object simplexml en array mais je perd alors l'interet de asXML().
Si vous avez des idées pour résoudre ce probleme...
Merci ^^
Bonjour,
je suis en train de modifier le systeme de template employé sur mon site pour le rendre plus flexible. Apres une petite recherche, j'ai décidé de préférer un systeme basé sur simplexml plutot que d'utiliser des transformation xsl que je juge trop gourmande en ressource sans systeme de cache ou qu'un systeme de template plus classique type smarty, pas assez flexible pour ce que je veux faire.
La méthode commence donc par parser un fichier xml pour le convertir en object simplexml. Ensuite un série de modification sont opérées à l'objet ainsi créer (création, modification ou suppréssions de noeux...). puis le rendu est obtenu via la méthode asXML() de simplexml.
Je trouve le résultat plutot probant mais je rencontre néanmois un probleme pour remplir le dernier point du cahier des charges : L'objectif est d'appliquer une méthode à tous les derniers elements de l'object simplexml. Je pense qu'un exemple sera plus clair : [code][b]Le fichier parsé : [/b]
<html>
<head>
<title>about:blank</title>
</head>
<body>
<div id="tete">
<form id="recherche" name="recherche" action="." method="post">
<input type="text" name="q"/>
<input type="submit"/>
</form>
</div>
<div id="contenu">
<h1>about:blank</h1>
</div>
[b]La méthode : [/b]
<?php
function __construct() {
$this->xml = $this->format(simplexml_load_file($this->tpldir.$this->tpl.$this->tplext));
$this->xml->head->title .= ' | Le syndrome de la page blanche';
array_walk_recursive($this->xml,array($this,'format'));
$this->xml = $this->xml->asXML();
}
function format($t,$v) {$this->xml->$t = htmlentities($v);}
?>
[/code]
Ici la méthode format() est censée remplacer tous les derniers éléments de l'objet xml par leur equivalent en entitées html. Malheureusement, array_walk_recursive appel correctement la méthode mais ne lui permet pas de modifier le dit élément puisque $t fait referece à l'objet de maniere relative et non absolue. Je continue de rechercher un equivalent de array_walk_recursive me permettant cela. J'ai aussi pensé à convertir l'object simplexml en array mais je perd alors l'interet de asXML().
Si vous avez des idées pour résoudre ce probleme...
Merci ^^