Categories > TinyButStrong general (FR) >

Comment faire des includes conditionnelles?

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Toan
Date: 2006-02-22
Time: 12:15

Comment faire des includes conditionnelles?

Bonjour,

<b>Voila j'ai ma page d'accueil: avec un menu à gauche, une entête, un main et un pied de page (classique quoi ! ;-) )</b>
-------------------------------------------------------------------------------------
<body  bgcolor="#EFEFEF">
<center>
<table width="100%" bgcolor="#C0C0C0" cellspacing="1">
    <tr bgcolor="white">
        <td valign="top" width="100%" colspan="2">
        [onload;file='../templates/entete.html']
        </td>
    </tr>
    <tr bgcolor="white">
        <td width="17%" valign="top">
        [onload;file=[var.template_menu]]
        </td>
        <td width="*%">
        [onload;script=contenu.php;subtpl]
        </td>
    </tr>
    <tr bgcolor="white">
        <td valign="top" width="100%" colspan="2">
        [onload;file='../templates/pied.html']
        </td>
    </tr>
</table>
</center>
</body>
</html>
---------------------------------------------------------------------------------

<b>Et je voudrais dans ma page contenu.php, n'afficher que la page qui correspond au menu du lien cliqué à gauche !</b>
Et par défaut, on arrive sur une page de bienveue.

du genre :
---------------------------------------------------------------------------------
//contenu de la page
if (!isset($_GET['menu'])) {
    include("bienvenue.php");
    }
else
    {
    include("ma_page_demandee.php");
    }

---------------------------------------------------------------------------------
Voila j'espère que vous voyez mieux ce que je veux faire?

Comment l'appliquer à TBS?

Merci de votre réponse.
By: Skrol29
Date: 2006-02-22
Time: 13:23

Re: Comment faire des includes conditionnelles?

Bonjour,

Le paramètre 'script' accepte aussi les champ [var]. Il te suffit donc de préparer une variable PHP qui contient le script à inclure et le tour est joué.
Exemple :
[onload;script=[var.page_prince];subtpl]

Une autre possibilité est d'utiliser les paramètres if/then/else mais alors tu n'auras le choix qu'en deux scripts.
Exemple :
[onload;script=[val];subtpl;if [var._GET.menu;noerr]='';then 'bienvenue.php' else 'ma_page_demandee.php']

Une autre soluce est de gérer le sous-modèle à insérer directement dans le sous-script "contenu.php".

By: Toan
Date: 2006-02-22
Time: 14:32

Re: Comment faire des includes conditionnelles?

Bonjour Skol,

Tjrs aussi rapide! (comme la petite souris du mexique! (speedy gonzales) ;-)

Donc, si j'ai bien compris ce bout de code:
[onload; script=[val];subtpl; if [var._GET.menu] == ''; then 'bienvenue.php' else 'ma_page_demandee.php']

veut dire que [val] prends la valeur retournée par le test?

Merci de me confirmer.

@+
By: Skrol29
Date: 2006-02-22
Time: 14:54

Re: Comment faire des includes conditionnelles?

Oui. [val] est un mot clé utilisable dans certains paramètres de champ.
By: Toan
Date: 2006-02-22
Time: 16:50

Re: Comment faire des includes conditionnelles?

Re,

1- Skrol29: tu n'as les chapeaux ronds des fois comme dit la chanson ?
->Ils ont les chapeaux ronds, vive les bretons ... !

2- sinon, sur tes conseils, j'ai adapté le code et ça ne marche pas mon script!

Tu peux voir ce qui ne vas pas?

page d'accueil: acceuil.html
-------------------------------------------------------------------------------------
<html>
    <head>
        <title>Bienvenue [var.user]</title>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
        <meta name="robots" content="none" />
        <link rel="stylesheet" href="../styles/intranet.css" type="text/css" />
    </head>

<body  bgcolor="#EFEFEF">
<center>
<table width="100%" bgcolor="#C0C0C0" cellspacing="1">
    <tr bgcolor="white">
        <td valign="top" width="100%" colspan="2">
        [onload;file='../templates/entete.html']
        </td>
    </tr>
    <tr bgcolor="white">
        <td width="17%" valign="top">
        [onload;file=[var.template_menu]]
        </td>
        <td width="*%">
          [onload;script=[val];subtpl;if [var._GET.page] = '';then 'bienvenue.php';else '[var._GET.page]']
        </td>
    </tr>
    <tr bgcolor="white">
        <td valign="top" width="100%" colspan="2">
        [onload;file='../templates/pied.html']
        </td>
    </tr>
</table>
</center>
</body>
</html>
----------------------------------------------------------------------------------

page accueil.php :
----------------------------------------------------------------------------------
<?
include_once('../../tbs/tbs_class.php');
?>

<?

//template des menus
$template_menu = "../templates/menu.html";

//template du contenu
if (!isset($_GET['page'])) {
    $_GET['page'] = '';
    }

$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('../templates/accueil.html');

$TBS->Show();

?>
---------------------------------------------------------------------------------

Et quand je lance accueil.php: UNE PAGE VIDE!

c'est grave docteur?

@+
By: Skrol29
Date: 2006-02-22
Time: 17:05

Re: Comment faire des includes conditionnelles?

>1- Skrol29: tu n'as les chapeaux ronds des fois comme dit la chanson ?
>Ils ont les chapeaux ronds, vive les bretons ... !

?? !! Ch'uis toulousain moi (cong').

J'ai testé ton bout de code et ça marche correctement pour moi.
Le problème doit probablement se situer au niveau du script "bienvenue.php" qui doit contenir un exit() ou un truc équivalent qui stoppe le process immédiatement.
By: Toan
Date: 2006-02-22
Time: 17:41

Re: Comment faire des includes conditionnelles?

Re,

quelle déception !! :-(
car dans Skrol29: le 29 je pensais que c'était le finistère(département 29) en Bretagne.

Tant pis, j'aurai été content de voir un local! ;-)

Au fait, tu avais raison(cf. mon code ci-dessous)
Mais le problème reste entier: je ne peux pas utiliser des sous-sous-modèles.

Car dans bienvenue.php, je pensais faire appel encore à un template bienvenue.html !

C'est possible?

mon bienvenue.php:
------------------------------------------------------------------------------------
<?php
include_once('../../tbs/tbs_class.php');
?>

<?

$ma_variable = "bienvenue Skrol de TOULOUSE et non du FINIST7RE";

$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('../templates/bienvenue.html');

$TBS->Show();

?>
-----------------------------------------------------------------------------------

@+
By: Skrol29
Date: 2006-02-22
Time: 18:12

Re: Comment faire des includes conditionnelles?

Ca ne peut pas fonctionner comme ça. Ton code "bienvenue.php" est écrit comme si c'était un script indépendant. Mais là il est exécuté en mode sous-modèle.  En mode sous-modèle, le code ne s'exécute pas dans un contexte global, mais dans le contexte d'un sous-script appelé par TBS.
Cela implique que tes variables sont locales et non pas globales, et que  TBS est déjà instancié. Si tu crées un nouvelle instance, elle sera exécuté indépendement de l'instance appelante et ça peut faire capoter la fusion. Dans ton exemple, Show() fait quitter le script global car $TBS est une nouvelle instance.

Voici un code qui devrait marcher en mode sous-fusion et en mode normal (pour les tests):
<?php

if (isset($this)) {
  $TBS =& $this // mode sous-modèle
  global $ma_variable;
} else {
  $TBS = new clsTinyButStrong; // mode normal
}

$ma_variable = "bienvenue Skrol de TOULOUSE et non du FINIST7RE";

$TBS->LoadTemplate('../templates/bienvenue.html');
$TBS->Show();

?>