Un système de template ultra-minimaliste
Par Yves Tannier le mercredi, janvier 24 2007, 15:07 - Le PHP - Lien permanent
Voici un petit bout de code php5 qui permet de créer simplement des fichiers à partir d'un modèle. Comme mon explication est loin d'être évidente
voici un exemple avec un fichier de zone DNS. Ici, tout ce qui est mis entre accolade doit être remplacé par sa valeur.
$TTL 3600
{domain}. IN SOA {ns1}. {contactzone}. (
{timestamp}
10800
3600
604800
3600 )
{domain}. IN NS {ns1}.
{domain}. IN NS {ns2}.
; Enregistrements Spf
{domain}. IN TXT "v=spf1 a mx ~all"
mail.{domain}. IN TXT "v=spf1 a -all"
www.{domain}. IN A {ipl}
{domain}. IN A {ipl}
ftp.{domain}. IN A {ipl}
mail.{domain}. IN A {ipl}
{domain}. IN MX 10 mail.{domain}.
{domain}. IN MX 20 mx-backup.sivit.fr.
smtp.{domain}. IN CNAME mail.{domain}.
pop.{domain}. IN CNAME mail.{domain}.
Voici donc la méthode en question qui s'intégrera parfaitement dans votre classe :
<?php
/** Création de fichier de configuration
*
* Mini système de template pour créer des fichiers de configuration à partir d'un squelette
* en remplaçant {pattern} par la valeur
*
* @access public
* @return bool
* @param string $orig Fichier "template"
* @param string $dest Fichier de destination
* @param array $keywords Mots à rechercher dans le template
* @param array $values Valeur de remplacement
*/
public function setConfigFile($orig,$dest,$keywords,$values)
{
// contenu du fichier dans un variable
$content = file_get_contents($orig);
// ajout pattern
foreach($keywords as $key=>$value) {
$patterns[] = "/{".$value."}/imSU";
}
// remplacement
$output_content = preg_replace($patterns, $values, $content);
// variable dans un fichier ou exception
if(!file_put_contents($dest,$output_content)) {
throw new Exception('Erreur dans la creation du fichier');
}
return true;
}
// }}}
?>
Pour notre exemple, je passe sur l'instanciation de la classe, On utiliserais la méthode de la façon suivante :
<?php
// on a un objet obj
// à remplacer...
$keywords = array('domain','ns1','ns2','timestamp','contactzone');
// par :
$values = array('toto.com','ns1.toto.com','ns2.toto.com',date('Ymdi'),'technique.toto.com');
// go !
$obj->setConfigFile('zonedns.tpl','/var/cache/bind/toto.com.hosts', $keywords, $values);
?>
Ce script n'a rien de révolutionnaire mais je trouve ça pratique. Ca ressemble de très loin à un système de template minimaliste 
PS : pour les allergiques à l'orienté objet, vous pouvez bien entendu l'utiliser comme une simple fonction

Commentaires
bonne source