[PHP][POO] Problème de template

Bonjour à tous,

J’ai un problème de template. J’ai fait un moteur de template tout simple ou on defini par exemple une variable title qui s’occupe du titre de la page dans le fichier .tpl ensuite parser…

Probleme ! J’ai une page qui a besoin d’afficher plusisuer fois le meme template à chaque validation du formulaire du même template ! Avec PHP j’ai reussi à le faire niquel mais avec un design bien bourrin dans la page mais j’aimerais l’integrer a mon moteur de template maintenant …

Mon probleme est que le template s’affiche en double apres la premiere validation du form apres en triple etc …

A chaque chargement je recreer mon objet template je reinstancie les variables normal … J’ai essayer de tuer l’objet à chaque rechargement mais ça marche pas j’ai essayer destroy(), delete() et __destruct() …

Merci de me donner un coup de main :slight_smile:

A mon avis, sans le dit moteur de template :slight_smile: on ira pas loin

Oups oui désolé ^^. Il est vraiment TRES basic :


<?php
class motor {
var $search = array();
var $replace = array();

function setVar($name, $value) {
$this->search[] = '{'.$name.'}';
$this->replace[] = $value;
}

function show($file) {
$tpl = file_get_contents('./templates/'.$file);
echo str_replace($this->search, $this->replace, $tpl);
}
}
?>

Merci;)

as tu fais une boucle du genre

foreach ( $files as $file ) $tpl->show($file);

Je te conseille d’abord de voir les appels de show() (en mettant si besoin des affichages pour t’aider), puis de voir les remplacements que tu fais en inhibant le tableau de remplacement (ie: str_replace($this->search, ‘[remplacement]’, …)

Je suis vraiment désolé mais tu peux être un peu plus clair car c’est mon premier moteur de template que je fais d’habitude j’utilisais smarty donc :s

En fait c’est super logique que ça bug comme ça parceque à chaque rechargement je rebalance l’objet :

<?php
$moteur = new motor();
$moteur->setVar('title', 'Mon titre');
$moteur->show('page.tpl');
?>

Mais je vois pas comment faire autrement

Merci :slight_smile:

L’idée c’est de voir où et quand tu fais ton affichage? Pour savoir où se situe ton problème.

Tu peux essayer debug_print_backtrace()[/url] ou sa copine PHP 4/5 [url=http://www.php.net/manual/en/function.debug-backtrace.php]debug_backtrace()

Genre :

function show(…) {
var_dump(debug_backtrace());

}

Pour voir où se situe tes appels.

Ca c’est dans le cas où tu as plusieurs appels à ta méthode show.

Maintenant, c’est peut-être toi qui en construisant tes variables (via set) concatène plusieurs fois cette dernière, ce qui fait que c’est ta variable qui contient le code redondant, et pas le reste.

Pour finir, normalement, avec un moteur de template, ça devrait se résumer à ça :

<?php
require_once 'global.php'; // charge le moteur


$motor->show(...); // toujours la dernière fonction
?>