Pour les besoins de mon site web, j'ai créer un classe de templates et certaines fonctions qui me permettent d'éviter d'avoir 15000 fichiers mais je suis confronté a un gros probleme.
J'ai une fonction erase_bloc dans ma classe qui me permet d'enlever un bloc commenté de la facon suivante.
<?php
//class de template (c)2006 ltcf.net
//[email protected]
class template
{
var $template;
var $blocs;
var $contenu_blocs;
function template($fichier)
{
if(file_exists($fichier))
{
$this->template=file_get_contents($fichier);
$this->blocs=array();
$this->contenu_blocs=array();
}
else
{
exit('Template introuvable');
}
}
function assign($variable,$valeur)
{
$this->template=str_replace('{'.$variable.'}',$valeur,$this->template);
}
function erase_bloc($bloc_name)
{
if(preg_match('!<\!--'.$bloc_name.'-->(.+)<\!--/'.$bloc_name.'-->!isU', $this->template))
{
$this->template = preg_replace('!<\!--'.$bloc_name.'-->(.+)<\!--/'.$bloc_name.'-->!isU', '', $this->template);
}
else
{
die('Le bloc "'.$bloc_name.'" n\'existe pas');
}
}
function assign_bloc($nom_bloc,$tableau)
{
$array_recherche=array('<!--'.$nom_bloc.'-->','<!--/'.$nom_bloc.'-->');
$array_remplace=array('','');
if(!isset($this->blocs[$nom_bloc]))
{
$tableau_ereg=array();
ereg('<!--'.$nom_bloc.'-->(.*)<!--/'.$nom_bloc.'-->',$this->template,$tableau_ereg);
$this->blocs[$nom_bloc]=$tableau_ereg[0];
} while(list($cle,$valeur)=each($tableau))
{
$array_recherche[]='{'.$cle.'}';
$array_remplace[]=$valeur;
}
if(!isset($this->contenu_blocs[$nom_bloc]))
{
$this->contenu_blocs[$nom_bloc]=str_replace($array_recherche,$array_remplace,$this->blocs[$nom_bloc]);
}
else
{
$this->contenu_blocs[$nom_bloc].=str_replace($array_recherche,$array_remplace,$this->blocs[$nom_bloc]);
}
}
function afficher_blocs()
{
while(list($cle,$valeur)=each($this->contenu_blocs))
{
$this->template=str_replace($this->blocs[$cle],$valeur,$this->template);
}
}
function afficher()
{
$this->afficher_blocs();
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == true)
{
$this->template = preg_replace('!<\!--connnexion_box-->(.+)<\!--/connnexion_box-->!isU', '', $this->template);
}
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == true)
{
$this->template = preg_replace('!<\!--link_connexion-->(.+)<\!--/link_connexion-->!isU', '', $this->template);
}
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == false || isset($_SESSION['user_level']) && $_SESSION['user_level'] != 2)
{
$this->template = preg_replace('!<\!--if_is_admin-->(.+)<\!--/if_is_admin-->!isU', '', $this->template);
}
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == false)
{
$this->template = preg_replace('!<\!--if_is_member--\>(.+)<\!--/if_is_member--\>!isU', '', $this->template);
}
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == true)
{
$this->template = preg_replace('!<\!--if_is_not_member--\>(.+)<\!--/if_is_not_member--\>!isU', '', $this->template);
}
echo $this->template;
}
function return_content()
{
$this->afficher_blocs();
return $this->template;
}
}
?>
Maintenant, mon probleme est que j'en ai un peu marre a chaque fois que j'ajoute un affichage dans le tpl des news de remettre a jour tous les erase_bloc()...Ma question est: Est il possible de faire une fonction qui me permettrait de ne récuperer dans $this->template que le contenu d'un bloc selectionné dans une fonction telle que $this->select_bloc ?
@+ et merci d'avance pour votre aide