Membres


Pas encore membre ?
inscrivez-vous ici

Connexion :
Login
Code
Mot de passe perdu ?
Liste des membres

Class de templates

Class de templates


Class de templates     Posté le 16/08/2005 à 00:00
MyXtrem
Membre
myXtrem
Site perso
37 posts
Inscrit le : 23/01/2005
Bonjour, je suis en train de créer une class de templates, j\'ai déjà fait la gestion des blocs, mais maintenant, il faudrait que j\'ajoute la fonction des blocs imbriqués. Pour l\'instant, je ne fais que pour un bloc imbriqué car plusieurs ne me servirait pas.
Enfin, voilà, j\'ai un problème. Voilà le code de ma class :

tpl.php
<?php
class tpl
{
    var 
$contenu;
    var 
$ajout = array();
    var 
$ajout_bloc = array();
    function 
tpl($page index.tpl)
    {
        if(!
file_exists($page))
        {
            
$page index.tpl;
        }
        
$chemin $page;
        
$template fopen($cheminr+);
        
$this->contenu .= fread($templatefilesize($chemin));
        
fclose($template);
    }
    function 
ajout($item$valeur)
    {
        
$this->ajout[$item] = $valeur;
    }
    function 
ajout_bloc($bloc$array)
    {
        
$this->ajout_bloc[$bloc][] = $array;
    }
    function 
fin()
    {
        foreach(
$this->ajout as $item => $valeur)
        {
            
$this->contenu str_replace({.$item.}, $valeur$this->contenu);
        }
        foreach(
$this->ajout_bloc as $bloc => $array)
        {
            
preg_match(!<!-- Debut .$bloc. -->(.*)<!-- Fin .$bloc. -->!isU$this->contenu$res) or $res = array(, );
            
$remplacement = ;
            foreach(
$array as $numero => $arrayvals)
            {
                
$a_ajoute $res[1];
                foreach(
$arrayvals as $item => $valeur)
                {
                    if(
is_array($valeur))
                    {
                        
preg_match(!<!-- Debut .$bloc._.$item. -->(.*)<!-- Fin .$bloc._.$item. -->!isU$res[1], $res2) or $res2 = array(, );
                        
$remplacement2 = ;
                        foreach(
$valeur as $numero2 => $arrayvals2)
                        {
                            
$a_ajoute2 $res2[1];
                            foreach(
$arrayvals2 as $item2 => $valeur2)
                            {
                                
$a_ajoute2 str_replace({.$bloc._.$item._.$item2.}, $valeur2$a_ajoute2);
                            }
                            
$remplacement2 .= $a_ajoute2;
                        }
                        
$res[1] = str_replace($res2[0], $remplacement2$res[1]);
                    }
                    else
                    {
                        
$a_ajoute str_replace({.$bloc._.$item.}, $valeur$a_ajoute);
                    }
                }
                
$remplacement .= $a_ajoute;
            }
            
$this->contenu str_replace($res[0], $remplacement$this->contenu);
        }
        return(
$this->contenu);
    }
}
?>

Je vous explque le fonctionnement :
- Pour ajouter une valeur toute seule (Le titre d\'une age par exemple, j\'utilise la méthode ajout() avec 2 paramètres : l\'item, et la nouvelle valeur pour cet item.
- Pour ajouter une valeur dans un bloc, j\'utilise ajout_bloc() avec 2 paramètres : le nom du bloc, et l\'array associatif qui comprend les items et les valeurs.
- Pour ajouter une valeur dans un sous-bloc, j\'utilise la même méthode ajout_bloc() mais au lieu de mettre une valeur dans l\'array associatif, je mets un autre array, et là, le script comprend que l\'item est en fait le nom du sous bloc.

Enfin je vais vous montrer le code des pages, ça va vous eclaircir.

index.php
<?php
require(templates.class.php);
$tpl = new tpl(index.tpl);
$tpl->ajout(TitrepageTest de templates);
$tpl->ajout_bloc(Paragraphe, array(Titre => Titre du paragrapheContenu => Petit test :pListe => array(array(Nom => Test))));
$tpl->ajout_bloc(Paragraphe, array(Titre => Titre du paragrapheContenu => Petit test :pListe => array(array(Nom => Test))));
echo 
$tpl->fin();
?>


index.tpl
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
    <head>
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
        <title>{Titrepage}</title>
    </head>
    <body>
        <!-- Debut Paragraphe -->
        <h1>{Paragraphe_Titre}</h1>
        <p>{Paragraphe_Contenu}</p>
        <ul>
        <!-- Debut Paragraphe_Liste -->
        <li>{Paragraphe_Liste_Nom}</li>
                <!-- Fin Paragraphe_Liste -->
        </ul>
        <!-- Fin Paragraphe -->
    </body>
</html>


Et voilà l\'array ajout_bloc de la class:
Array

(
    [Paragraphe] => Array
        (
            [0] => Array
                (
                    [Titre] => Titre du paragraphe
                    [Contenu] => Petit test :p
                    [Liste] => Array
                        (
                            [0] => Array
                                (
                                    [Nom] => Test
                                )

                        )

                )

            [1] => Array
                (
                    [Titre] => Titre du paragraphe
                    [Contenu] => Petit test :p
                    [Liste] => Array
                        (
                            [0] => Array
                                (
                                    [Nom] => Test
                                )

                        )

                )

        )





Et surtout, la page qui s\'affiche quand on charge index.php :
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
    <head>
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
        <title>Test de templates</title>
    </head>
    <body>
        
        <h1>Titre du paragraphe</h1>

        <p>Petit test :p</p>
        <ul>
        <!-- Debut Paragraphe_Liste -->
        <li>{Paragraphe_Liste_Nom}</li>
        <!-- Fin Paragraphe_Liste -->
        </ul>
        <h1>Titre du paragraphe</h1>
        <p>Petit test :p</p>

        <ul>
        
        <li>Test</li>
        
        </ul>
    </body>
</html>


En gros, le problème, c\'est que c\'est seulement à partir de la 2ème fois que ça s\'affiche, mais ça affiche les données du 1er, et même pour le 3ème, c\'est la même chose.
Si quelqu\'un a une solution parce que je planche dessus depuis ce matin, et ça m\'enerve grandement.

Merci d\'avance

________________________
myXtrem
 
Personne n'a encore répondu à cette question !
Vous n'est pas connecté en temps que membre, parceque j'en ai marre du spam, SEUL les membres peuvent poster des messages sur le forum.

Nous  -  Plan du site  -  Informations légale  -  Contact  -  © Graphiks.net