[Résolu]Templates imbriqués

Templates imbriqués [Résolu] - PHP - Programmation

Marsh Posté le 23-07-2004 à 09:33:15    

Bonjour,
 
Voila mon probleme : J'ai 1 template "a" qui contient un champ "x", je voudrais qu'en une circonstance bien précise PHP remplace x par le contenu d'un autre template "b", ceci "virtuellement" si vous voyez ce que je veux dire, de la sorte que le ficher de depart ne soit pas touché.
 
Merci d'avance


Message édité par esox_ch le 26-07-2004 à 12:34:44
Reply

Marsh Posté le 23-07-2004 à 09:33:15   

Reply

Marsh Posté le 23-07-2004 à 11:49:16    

up

Reply

Marsh Posté le 23-07-2004 à 11:57:40    

if
    //traitement
    if X
        //traitement
    fin if
else
    //traitement
fin if


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 23-07-2004 à 12:33:17    

heu j'ai peur de ne pas comprendre ...
P-e que je me suis mal exprimé, admettons que mon 1er template contienne :  
 

Code :
  1. <html>
  2. <head>
  3. <title>{title}</title>
  4. <body>{body}</body>
  5. </html>


 
et mon 2ème template :
 

Code :
  1. <table>
  2. <tr>
  3.   <td>{td}</td>
  4. </tr>
  5. </table>


 
Je voudrais pouvoir en 1er lieu assigner une valeur a {td} , puis prendre le resultat du 2ème template et l'affecter à la valeur {body}.

Reply

Marsh Posté le 23-07-2004 à 15:11:07    

J'ai pensser a modifier un peu le ficher IT.php de la sorte qu'au lieu d'imprimer le resultat (quand on lance show();) ca me retourne un variable de texte, mais a votre avi il y a pas plus simple?

Reply

Marsh Posté le 23-07-2004 à 15:11:56    

A ce monment là, tu prépares $body en l'affectant avec le résultat de l'application du premier template et ensuite tu travailles sur le second template en allat y remplacer {body} par $body


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 24-07-2004 à 12:49:53    

Oui je veux bien, mais comment recuperer $body ? Etant donné que l'affichage de la page se fait grace au ficher /html/it.php et a la commande show(); ? Il faudrait que je modifie it.php?

Reply

Marsh Posté le 24-07-2004 à 12:52:04    

donne ton code. Sans cela, c'est difficile à dire.


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 24-07-2004 à 13:24:34    

Code :
  1. function template($online,$boutons,$history,$forum_v,$pages,$file,$info)
  2. {
  3.   if(empty($online))
  4.    $online = "*******";
  5.   if(empty($boutons))
  6.    $boutons = "&nbsp;";
  7.   if(empty($history))
  8.    $history = "&nbsp;";
  9.   if(empty($forum_v))
  10.    $forum_v = "&nbsp;";
  11.   if(empty($pages))
  12.    $pages = "&nbsp;";
  13.   if(empty($file))
  14.    $file = "skin.tpl";
  15.   if(empty($info))
  16.    $info = "&nbsp";
  17.   else
  18.    $info = "Page générée en ~".$info." secondes";
  19.   include_once("HTML/IT.php" );
  20.   $forum = new IntegratedTemplate("templates" );
  21.   $forum->loadTemplatefile($file);
  22.   $forum->SetVariable(array("online" => $online,"boutons" => $boutons,"history" => $history,"forum" => $forum_v,"pages" => $pages,"file" => $file ,"info" => $info));
  23.   $forum->show();
  24. }
  25. function tpl($farray)
  26. {
  27. include_once("HTML/IT2.php" );
  28.   $forum = new IntegratedTemplate("templates" );
  29.   $forum->loadTemplatefile('profil.tpl');
  30.   $sarray = "";
  31.   while(list($cle,$valeur) = each($farray))
  32.   {
  33.    if(empty($sarray))
  34.       $sarray .= "$cle => $valeur";
  35.      else
  36.       $sarray .= ",$cle => $valeur";
  37.   }
  38.    $template_array[]= array($sarray);
  39.   $forum->SetVariable($template_array);
  40.   $forum->show();
  41. }


 
voila les 2 code pour les template, je voudrais que le resultat du 1er show() devienne le parametre de la 2ème (si c pas un array j'arrengerais cela apres).
 
J'espere avoir été clair ...


Message édité par esox_ch le 24-07-2004 à 13:24:54
Reply

Marsh Posté le 24-07-2004 à 13:43:04    

je ne comprends pas ton code
show est une méthode issue d'une classe et je ne connais pas la classe. Tu dois essayer d'utiliser un moteur de template. N'existe-t-il pas un forum dédié à ce moteur ?


Message édité par T509 le 24-07-2004 à 13:44:22

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 24-07-2004 à 13:43:04   

Reply

Marsh Posté le 24-07-2004 à 13:52:18    

show() est une methode issue de /html/it.php qui est un ficher stocké dans les pear d'apache, un lib comme une autre quoi

Reply

Marsh Posté le 24-07-2004 à 14:15:48    

Cela ne change pas, je ne connais pas la classe.
J'ai regardé rapidement et je ne sais pas te répondre


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 24-07-2004 à 14:17:42    

A ton avi, si je modifie ca :  
 

Code :
  1. function show($block = "__global__" ) {
  2.         print $this->get($block);
  3.     }


 
Au lieu de faire print, je le met dans un variable qu'apres j'utilise plus loin, ca peut marcher?

Reply

Marsh Posté le 24-07-2004 à 14:23:05    

essaie, je ne sais pas.
 
La classe IT ne semble pas construite pour faire des boucles de mise en forme. Cela semble plutôt être fait pour :
- preparer les données
- les mettre en tableau
- parser le template


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 24-07-2004 à 14:36:48    

Je sais justement, c'est pour ca que je demandais comment faire ... Parceque j'aurais préféré laisser le IT.php comme il etait ... bon je vais modifier un peut tout ça ... merci

Reply

Marsh Posté le 24-07-2004 à 22:13:48    

salut, voici une methode très simple qui peut résoudre ton problème
 

Code :
  1. function getTable($fichier = null)
  2. {
  3. $fp = fopen($fichier,"rb" );
  4. if($fp)
  5. {
  6. $codeHTML = fread($fp, filesize($fichier));
  7. fclose($fp);
  8. }
  9. return $codeHTML;
  10. }
  11. //pour ton template tu fe
  12. $template->set_var('TABLE',getTable('tonfichier.html');


 
PS : ya surement un truc à faire au niveau des CHMOD  :pt1cable:


Message édité par joelan le 24-07-2004 à 22:17:37
Reply

Marsh Posté le 25-07-2004 à 04:30:56    

Je vois pas tres bien en quoi ca va m'aider d'extraire l'html du 2ème ficher ... Pask le {td} va rester tel ... non? ...
P.S: Pourquoi faire une lecture rb ?

Reply

Marsh Posté le 25-07-2004 à 16:24:05    

Enfait apres avoir essayer de modifier le ficher IT.php , je me trouve a ca :  
 
Ceci marche :

Code :
  1. function show($block = "__global__" ) {
  2.         echo $this-> get($block);
  3.     }


Ceci ne me retourne aucune valeur :  

Code :
  1. function show($block = "__global__" ) {
  2.          $resultat = $this->get($block);
  3.          return $resultat;


 
Au cas ou ... le ficher IT.php se trouve a la racine de php, dans le pear , dossier HTML.
 
Merci d'avance


Message édité par esox_ch le 25-07-2004 à 16:50:00
Reply

Marsh Posté le 27-07-2004 à 21:23:49    

Ouais le HTML inclus est statique (donc pas parsé).
Si tu dois parsé le code tu px tenter ça:
 

Code :
  1. $templateMAJ = new template($TEMPLATE_DIR);
  2. $templateMAJ -> set_file('file', 'fichierCadre.html');
  3. $templateMAJ -> set_block('file','BlockLevel1', 'blv1');
  4. $templateMAJ -> set_block('BlockLevel1', 'ContentBlockLvl1' , 'cnblv1');
  5. // tu inclus les gros éléments HTML d'abord ex: banniere,  
  6. //menu etc..
  7. $templateMAJ -> set_var('BANNIERE', $ban);
  8. $templateMAJ -> set_var('MENU', $this->getTABLE('tonmenu.html');
  9. //un deuxiéme template avec le fichier qui t'interesse
  10. // tu parses un tableau
  11. $template = new Template($TEMPLATE_DIR);
  12. $template-> set_file('file2', 'lapageaParse.html');
  13. $template -> set_block ('file2', 'Blocklevel2', 'blvl2')
  14. $template -> set_block ('BlockLevel2', 'resultBlock', 'res');
  15. foreach ( $resArray as $key => $value )
  16. {
  17. $template -> set_var ( 'ID' , $resArray[$key]);
  18. $template -> set_var ( 'VALUE' , $resArray[$value]);
  19. $template -> parse ('res', 'resultBlock' , TRUE)
  20. }
  21. //ensuite tu parses le contenude file2 ds ton $templateMAJ
  22. // la seule ligne a retenir est la
  23. $templateMAJ -> set_var( 'LEVEL2', $template->parse('blvl2', 'Blocklevel2'));
  24. $templateMAJ -> parse ('cnlvl1', 'ContentBlocklvl1');
  25. $templateMAJ -> parse ('blv1' , 'BlockLevel1');
  26. $templateMAJ -> pparse ('output', 'file');


 
Quelles librairies utilise tu ?


Message édité par joelan le 27-07-2004 à 21:35:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed