Interpreter un contenu recupere dans un fichier

Petit nouveau ! | 8 Messages

28 sept. 2010, 14:41

Bonjour,

J'utilise des fichiers (.model) qui font office de modeles pour gerer les mails que j'envoie a mes utilisateurs, et dans ces modeles, j'aimerais pouvoir y placer des constantes.

Donc un modele ressemble a cela:
Bienvenue {player_login}, vous etes desormais inscrit sur le serveur '.SERVER_NAME.', rendez-vous sur '.SERVER_URL.' pour jouer.
Pour envoyer le mail, je recupere donc le contenu du fichier, remplace les {blabla}, par ce que je veux, et j'aimerais que les constantes '.CONSTANTE.' soient interpretees et donc remplacees par leur contenu.

Est-ce possible? Est-ce une mauvaise methode? (il y a peut etre un meilleur moyen de faire).

Merci par avances pour vos reponses.

PS: Pardonnez-moi pour les accents, j'utilise un clavier qwerty.
Modifié en dernier par TomsDEV le 28 sept. 2010, 17:45, modifié 2 fois.

Eléphant du PHP | 314 Messages

28 sept. 2010, 14:43

Je ne sais pas comment marche ton code, surtout que tu ne nous donne rien à notre mettre sous la dent...

mais pourquoi ne pas creer des "variables {}" avec les informations de la constante ?
Cordialement,
Julien - http://laravel.fr/

Petit nouveau ! | 8 Messages

28 sept. 2010, 14:47

Je cherche justement une solution pour eviter a avoir a utiliser des {} pour les constantes.

Voici la fonction qui recupere le model:
function	getMailModel($name, $replace = NULL)
{
	$model = file_get_contents(ROOT.'/../lang/'.LANGUAGE.'/mails/'.$name.'.model');

	$mail = array();
	preg_match('`\[title\](.+)\[/title\]`isU', $model, $title);
	preg_match('`\[body\](.+)\[/body\]`isU', $model, $body);

	$mail['title'] = trim(preg_replace ("/\s+/", " ", $title[1]));
	$mail['body'] = (trim(preg_replace ("/\s+/", " ", $body[1]));

	foreach ($replace AS $old_str => $new_str)
		$mail['body'] = str_replace('{'.$old_str.'}', $new_str, $mail['body']);

	return $mail;
}

Eléphant du PHP | 314 Messages

28 sept. 2010, 15:36

Re-

Alors file_get_contents ne traite pas le PHP, de ce fait ce que vous recevez est une banale chaine de caractère, pas du code PHP interprétable.
Cordialement,
Julien - http://laravel.fr/

ViPHP
ViPHP | 5462 Messages

28 sept. 2010, 16:04

comme ca
$player_login = 'truc';	
$str = "Bienvenue {player_login}, vous etes desormais inscrit sur le serveur '.SERVER_NAME.', rendez-vous sur '.REQUEST_URI.' pour jouer.";
	
$pattern = array('/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/eui', '/\'\.(\w+)\.\'/eui');
$replace = array('$$1', '$_SERVER["$1"]');
	
$text = preg_replace($pattern, $replace, $str);
	
echo $text;
//Bienvenue truc, vous etes desormais inscrit sur le serveur localhost, rendez-vous sur /test/ pour jouer.

EDIT : mais bon pourquoi ne pas faire direct
Bienvenue $player_login, vous etes desormais inscrit sur le serveur $_SERVER["SERVER_NAME"], rendez-vous sur $_SERVER["REQUEST_URI"] pour jouer.
et ensuite
ob_start();
require_once(ROOT.'/../lang/'.LANGUAGE.'/mails/'.$name.'.model');
$mail = ob_get_clean();
//Bienvenue truc, vous etes desormais inscrit sur le serveur localhost, rendez-vous sur /test/ pour jouer.

Petit nouveau ! | 8 Messages

28 sept. 2010, 17:43

Merci stealth35!

En effet la solution etait l'utilisation de ob_start(), ob_get_clean() et l'include.

Merci aussi aux autres qui ont repondu ;)