Categories > TinyButStrong general (FR) >

Problème d'affichage avec plusieurs instances

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Little
Date: 2005-10-12
Time: 12:30

Problème d'affichage avec plusieurs instances

Bonjour,

Je souhaite avoir une page php qui structure mon application et qui charge donc plusieurs instances de templates mais je n'arrive pas à le faire.
Seule le premier template est affiché. Comment faire?
(J'avais la solution d'inclure des sous-templates dans mon template principal mais ça ne me plaît pas. Je voudrais que ce soit le php qui structure mon appli)

Code PHP :
<?php
// Chargement de la classe TinyButStrong - Moteur de templates
require_once('includes/tbs_class_php5.php');

$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('templates/entete.tpl');
$login = "Test";
$TBS->Show();
   
$TBS2 = new clsTinyButStrong;
$TBS2->LoadTemplate('templates/accueil.tpl');
$liste = array();
$liste[] = array("nom"=>"Nom1","prenom"=>"Prénom1");
$liste[] = array("nom"=>"Nom2","prenom"=>"Prénom2");
$liste[] = array("nom"=>"Nom3","prenom"=>"Prénom3");
$TBS2->MergeBlock('user',$liste);
$TBS2->Show();
   
$TBS3 = new clsTinyButStrong;
$TBS3->LoadTemplate('templates/pieddepage.tpl');
$TBS3->Show();
?>

Code Template entete.tpl :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>MonAppli</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/screen.css" media="screen" />
<link rel="stylesheet" type="text/css" href="css/print.css" media="print" />
</head>

<body>
<div id="enTete">
Je suis [var.login]
</div>

Code Template accueil.tpl :
<div id="corps">
<table>
<tr><th>Nom</th><th>Prénom</th></tr>
<tr class="impaire">
<td>[user.nom;block=tr]</td>
<td>[user.prenom]</td>
</tr>
<tr class="paire">
<td>[user.nom;block=tr]</td>
<td>[user.prenom]</td>
</tr>
<tr class="vide">
<td colspan="2">[user;block=tr;nodata]Il n'y a aucun utilisateur</td>
</tr>
</table>
</div>

Code pieddepage.tpl :
<div id="piedDePage">
<img src="images/logo_xhtml.gif" width="80px" height="15px" alt="W3C XHTML 1.0" title="W3C XHTML 1.0" />
<img src="images/logo_css.gif" width="80px" height="15px" alt="W3C CSS 2.0" title="W3C CSS 2.0" />
<img src="images/logo_tbs.gif" width="80px" height="15px" alt="TBS Template" title="TBS Template" />
</div>
</body>
</html>

Code CSS :
tr.impaire {
background-color: #eaf4ff;
}

tr.paire {
background-color: #fff5ec;
}

tr.vide {
background-color: #ff6c6c;
}

Et mon résultat n'affiche que le template de l'en-tête :
<div id="enTete">
Je suis Test
</div>
By: Skrol29
Date: 2005-10-12
Time: 12:41

Re: Problème d'affichage avec plusieurs instances

Bonjour,

Ce que je fais pour mes appli, c'est de passer au script Php une variable 'frm' en POST ou en GET. De cette manière le script sait quelle page il doit afficher et donc quel template afficher.

Le script est donc structuré de la sorte :
  $TBS = new clsTinyButStrong;
  if ($frm=='accueil') {
   $TBS->LoadTemplate(....);
    ...
  }
  if ($frm=='inscription') {
   $TBS->LoadTemplate(....);
    ...
  }

Il y a un exemple d'appli de ce genre dans la section Téléchargement.
C'est tbsForum (ce forum) constitué d'un seul script Php pour toutes les fenêtres.
By: Little
Date: 2005-10-12
Time: 12:45

Re: Problème d'affichage avec plusieurs instances

La rapidité pour avoir une réponse est impressionnante ! merci.

Par contre ce qui m'embete c'est que j'voudrai bien en effet faire comme tu le dis pour charger le bon "corps" en fonction d'où je suis sur l'appli, par contre, j'aimerai bien pouvoir charger un template d'entete, et de pied de page en plus et éviter de l'appeler dans chaque template correspondant au "corps".

Je sais pas si je suis très clair ;)
By: Skrol29
Date: 2005-10-12
Time: 13:31

Re: Problème d'affichage avec plusieurs instances

Oui c'est clair.
Tu peux charger des formulaire par ajout cumulatif plutôt que par écrasemement.
Par exemple :
$TBS->LoadTemplate('entete.tpl');
$TBS->LoadTemplate('corps.tpl','+');
$TBS->LoadTemplate('pied.tpl','+');
By: Little
Date: 2005-10-12
Time: 13:41

Re: Problème d'affichage avec plusieurs instances

merci !! c'est exactement ce que je cherchais sauf que j'avais pas compris l'utilité du '+'.
Maintenant c'est clair et ça marche !

Bonne continuation
By: Little
Date: 2005-10-13
Time: 14:46

Re: Problème d'affichage avec plusieurs instances

J'ai quand même une question, quand j'écrivais ça :
$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('templates/entete.tpl');
$login = "Test";
$TBS->Show();

$TBS2 = new clsTinyButStrong;
$TBS2->LoadTemplate('templates/accueil.tpl');
$liste = array();
$liste[] = array("nom"=>"Nom1","prenom"=>"Prénom1");
$liste[] = array("nom"=>"Nom2","prenom"=>"Prénom2");
$liste[] = array("nom"=>"Nom3","prenom"=>"Prénom3");
$TBS2->MergeBlock('user',$liste);
$TBS2->Show();

$TBS3 = new clsTinyButStrong;
$TBS3->LoadTemplate('templates/pieddepage.tpl');
$TBS3->Show();
, en principe je devais pas charger des modèles par écrasement vu que j'ai trois objets de templates différents?
J'aurais écrit le même code avec
$TBS
à chaque fois, là en effet j'aurais écrasé chaque modèle...
By: Skrol29
Date: 2005-10-13
Time: 15:15

Re: Problème d'affichage avec plusieurs instances

Effectivement, avec $TBS1, $TBS2 et $TBS3, les trois contenus étaient dans des espaces mémoires différents. Donc non écrasés.
Avec un seul $TBS, il auraient était écrasés au moment du LoadTemplate().
By: Little
Date: 2005-10-13
Time: 15:37

Re: Problème d'affichage avec plusieurs instances

Donc je ne comprends pas pourquoi avec ces instructions, seul le premier template était affiché...
Tu as une idée?