Système de template

Eléphanteau du PHP | 10 Messages

25 août 2005, 22:13

Salut

Voilà je suis en train de coder un site pour un ami, et je me rend compte que l'utilisation de "template" (pas de design complets, je vais expliquer :) ) facilite énormément la vie, et surtout le code.
J'ai alors cherché dans le systeme d'Invision (un forum) qui propose l'intégration d'informations du forum (nombre de membres, de posts ...) à partir d'un systèeme de "mini-templates", qui s'appele ssi template.
J'ai alors cherché dans le code pour en arriver à un code (attention version très simplifiée, sans aucunes vérification, je les ait supprimée au fur et à mesure pour voir ce qui pouvait empecher mon script de marcher) que voici :
<?php
$export_type = "js";
$template_url = "templates";

switch ($_GET['a'])
{
	case 'matchs':
		do_matchs();
		break;
		
		
	default:
	echo "erreur";
		break;
}
function output($to_echo) {

	
	
		$to_echo = str_replace ("\r", "", $to_echo);
		$to_echo = str_replace ("\n", "", $to_echo);
		$to_echo = str_replace ("'", "\"", $to_echo);
		echo "<!--\ndocument.write('".$to_echo."');\n-->";
}


function load_template($template=""){

	$filename = "templates/matchs.html";
	
	if (file_exists($filename)) {
    
		if ( $FH = fopen($filename, 'r') )
		{
			$template = fread( $FH, filesize($filename));
			fclose($FH);
		}
			
	}
	else{
		echo "Erreur : $filename";
	}
	return $template;
}


function parse_template( $template, $assigned=array() )
{
	
	foreach( $assigned as $word => $replace)
	{
		$template = preg_replace( "/\{$word\}/i", "$replace", $template );
	}
	
	return $template;
}

function do_matchs(){

$template = load_template("matchs.html");
$to_echo = parse_template( $template, array (
								    		 'date'   => "ladate",
								    		 'team'   => "leskilleurs",
								    		 'score'   => "lescore",
								    		 'comment'   => "commentaire"
								    	  )
								    );
	output($to_echo);								
}
?>
Que j'appele ensuite (pour l'intégrer dans ma page, avec une commande javascript :

Code : Tout sélectionner

<script type="text/javascript" src="templates_matchs2.php?a=matchs"></script>
et voici le script du fichier qui sert de template (matchs.html)

Code : Tout sélectionner

<tr> <td width="25%">{date}</td> <td width="50%">{team}</td> <td width="20%">{score}</td> <td width="5%">{comment}</td> </tr>
et quand je charge la page avec le javascript, rien :(
j'ai essayé à partir de ma page "templates_matchs2.php" d'afficher ce que ça devrait donner en ajoutant :
$match = do_matchs();
Mais sans résultat non plus.

C'est alors que j'ai essayé d'afficher ce que ça devrait donner, toujours à partir de ce même fichier, mais cette fois en n'utilisant qu'une seule et même fonction
function do_matchs2(){
$filename = "templates/matchs.html";
$FH = fopen($filename, 'r');
$template = fread( $FH, filesize($filename));
$assigned = array (
								    		 'date'   => "ladate",
								    		 'team'   => "leskilleurs",
								    		 'score'   => "lescore",
								    		 'comment'   => "commentaire"
								    	  );
foreach( $assigned as $word => $replace)
	{
		$template = preg_replace( "/\{$word\}/i", "$replace", $template );
	}
	echo $template;
}
et là j'obtiens bien
ladate leskilleurs lescore commentaire
j'ai alors tenté d'appeler cette fonction sur la page où je veuix l'inclure j'ai donc modifié
case 'matchs':
		do_matchs();
		break;
Pour en faire
case 'matchs':
		do_matchs2();
		break;
Et ça ne marche pas :( quelqu'un aurait il une idée ? je dois dire que mes tests étant fructueux je désespère :( c'est peut être tout bête mais je n'ai rien trouvé :'(

Petite précision : les fonctions ne fonctionnent pas je crois dans quand je les appele dans ma focntion "do_matchs" car le output($to_echo)" par exemple ne donne rien, alors que si je fais un echo il m'est arrivé qu'il marche (je ne sais plus dans quel cas par contre avec tous ces essais :\)

Merci de votre aide
Modifié en dernier par benamou le 27 août 2005, 20:19, modifié 1 fois.

Eléphanteau du PHP | 10 Messages

27 août 2005, 20:02

Arf personne ne sait ce que je peux faire ? :(
Je sais pas si j'ai été clair, s'il faut je peux réexpliquer certaines choses.

Eléphant du PHP | 185 Messages

27 août 2005, 20:14

Regarde bien cette partie, le nom des variables:
<?php
$to_echo = parse_template( $template, array (
                                             'date'   => "ladate",
                                             'team'   => "leskilleurs",
                                             'score'   => "lescore",
                                             'comment'   => "commentaire"
                                          )
                                    );
    output($tp_echo);    

Eléphanteau du PHP | 10 Messages

27 août 2005, 20:18

Regarde bien cette partie, le nom des variables:
<?php
$to_echo = parse_template( $template, array (
                                             'date'   => "ladate",
                                             'team'   => "leskilleurs",
                                             'score'   => "lescore",
                                             'comment'   => "commentaire"
                                          )
                                    );
    output($tp_echo);    
Oui enfin c'est une erreur que j'ai faite en faissant un copier/coller, mais l'erreur est corrigée désolé je n'avais pas fais attention à mettre à jour.

Eléphant du PHP | 185 Messages

27 août 2005, 20:27

Erreur de copier coller, parce que maintenant le copier coller il modifie les o en p ^^
bah chez moi en mettant $to_echo à la place de $tp_echo, ca marche ^^

Invité
Invité n'ayant pas de compte PHPfrance

28 août 2005, 00:30

bah chez moi en mettant $to_echo à la place de $tp_echo, ca marche ^^
Arf bizarre :\ j'ai fait des tas d'essai :\
Enfin sous quel version de php es tu ? :)

Invité
Invité n'ayant pas de compte PHPfrance

28 août 2005, 00:31

Erreur de copier coller, parce que maintenant le copier coller il modifie les o en p ^^
bah chez moi en mettant $to_echo à la place de $tp_echo, ca marche ^^
Ce que je veux dire c'est que j'ai copié collé le code après avoir fait une modification (donc avec l'erreur de frappe et non le code actuel qui est enregistré, d'où le problème de variable)

Arf bizarre :\ j'ai fait des tas d'essai :\
Enfin sous quel version de php es tu ? :)[/quote]

Eléphanteau du PHP | 10 Messages

28 août 2005, 00:38

Oups désolé oublié de me logger ^^

Et bien à ma grande surprise le code marche, et je ne sais pas pourquoi je n'ai rein touché depuis que j'ai posté (et pas changé un $tp_echo pour un $to_echo, vois pas l'interet de raconter des conneries :shock: ) et maintennt ça marche, alors si quelqu'un pouvait m'expliquer les alléas d'easyphp et de windaube ?
Celà m'est déjà arrivé de devoir redémarrer mon pc alors qu'un script ne marchait pas, et a vrai dire je n'ai jamais compris la raison concrete :\

Enfin comme on me dit souvent, mieux directement tester en ligne plutot qu'en local ..