Categories > TinyButStrong general (FR) >

pb de selected:Malgré le forum !

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

pb de selected:Malgré le forum !

Bonjour,

Avant de poster j'ai quand même essayer de me débrouiller seul, notamment avec ce post: http://www.tinybutstrong.com/apps/forum/index.php?frm=msg&thr_id=324&msg_id=3729

Or tjrs pas résolu!

Donc je vous soumets mon problème:

HTML:
.....
<tr bgcolor=[var.tab_constantes.COUL_GRIS]>
        <td><b>Autoriser les groupes:</b></td>
        <td>
          <select name="Groupes[]" size="[bloc_groupes.#]" multiple>
        <option value="[bloc_groupes.code_groupe]">[bloc_groupes.grp_nom;block=option]</option>
        <option>[var.code_groupe;selected]</option>
        </select>
        </td>
    </tr>
....

PHP:
....
$reqGroupes  = "SELECT G.code_groupe, G.grp_nom FROM Groupes G ";
$reqGroupes .= "ORDER BY G.grp_nom ;";

$code_groupe = "1";

$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);
....

ça ajoute l'élément ayant le code_groupe=1 à la fin de liste avec tous les autres éléments de la requête!

d'où vient le problème?

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

Re: pb de selected:Malgré le forum !

Salut,

Cela peut arriver si la valeur à sélectionner n'a pas été truvée dans la liste.
Peux-tu regarder ton code source après fusion et voir si il y a ou pas un élément avec la valeur "1" dans la liste (autre que l'item ajouté en fin).
By: Toan
Date: 2006-02-28
Time: 11:06

Re: pb de selected:Malgré le forum !

Bonjour,

Voici le code source:

.........................
    <tr bgcolor=#EFEFEF>
        <td><b>Autoriser les groupes:</b></td>
        <td>
          <select name="Groupes[]" size="9" multiple>
        <option value="1">Administrateurs</option><option value="7">Administratif</option><option value="2">Commerciaux</option><option value="6">Comtabilité</option><option value="3">Direction</option><option value="9">Formation</option><option value="8">Graphisme/Communication</option><option value="5">Produits</option><option value="4">Ventes</option>
       
        <option selected="selected">1</option></select>
        </td>
    </tr>
.......................................

il y a bien un "1" à la fin:
<option selected="selected">1</option>

que dois-je faire docteur pour que ça marche?

Merci.
By: Skrol29
Date: 2006-02-28
Time: 11:55

Re: pb de selected:Malgré le forum !

Bonjour,

J'ai recopié le code et pour moi ça marche très bien. C'est bien l'item "Administrateurs" qui est sélectionné. La seule explication que je vois c'est que dans ton code, la ligne
$code_groupe = "1";
se trouve en fait après la ligne
$TBS->Show();
dans ce cas, il ne peut pas faire la sélection car l'item 1 n'existe pas encore.
By: Toan
Date: 2006-02-28
Time: 14:59

Re: pb de selected:Malgré le forum !

bjr,

j'ai mis le $code_groupe = "1"; juste maintenant avant le $TBS->Show(); comme ceci:


$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);

$code_groupe = 1;

$TBS->Show();


Mais maitenant, j'ai une erreur:

TinyButStrong Error (Merge PHP global variables): Can't merge [var.code_groupe] because there is no PHP global variable named 'code_groupe'. This message can be cancelled using parameter 'noerr'.


Et quand je mets le paramètre noerr dans l'option:

[var.code_groupe;selected;noerr]</option>

j'ai une ligne vide à la fin qui est sélectionnée de la liste!

comment dois-je faire pour que ça marche sans bug?

Merci de votre réponse.
By: Skrol29
Date: 2006-02-28
Time: 15:15

Re: pb de selected:Malgré le forum !

Ce code PHP ne serait pas dans un sous-script ou dans une fonction par hazard ?
By: Toan
Date: 2006-02-28
Time: 15:57

Re: pb de selected:Malgré le forum !

euh oui, c'est exact !

il y a un include de script avant le merge

Include:
include("./includes/$_GET[page].inc");

TBS:

$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);

$code_groupe = 1;

$TBS->Show();

c'est grave docteur?

que dois-je faire maitenant pour que ça marche?
By: Skrol29
Date: 2006-02-28
Time: 16:15

Re: pb de selected:Malgré le forum !

Ce n'est pas exactement ce que je vouslais dire.

Est-ce que ton code PHP
  $TBS->MergeBlock()...
  $code_groupe = 1;
  $TBS->Show();
est exécuté dans une fonction PHP ou bien depuis un sous-script TBS (c'est à dire appelé par un paramètre TBS "script=monfichier.php" ?

je demande cela parce qu'il semble que ta variable $code_groupe ne soit pas reconnue comme une variable globale. C'est peut être une variable locale à une fonction PHP ou à un sous-script TBS.
By: Toan
Date: 2006-02-28
Time: 17:59

Re: pb de selected:Malgré le forum !

Re,

non! la variable $code_groupe se trouve bien avant le [onload;script=contenu.php;subtpl].

Ce que je ne comprends pas, c'est qu'il y a ce message d'erreur, mais ça sélectionne bien quand même l'item dont la valeur du code_groupe = 1 !!!

Donc le mieux c'est que je vous mon code:

1- fichier page accueil HTML:
<html>
    ...
<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="19%" valign="top">
        [onload;script=menu.php;subtpl]
        </td>
        <td width="*%" valign="top">
          [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>

2- fichier page accueil PHP:
<?php
    ....
$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('../templates/accueil.html');

$reqGroupes  = "SELECT G.code_groupe, G.grp_nom FROM Groupes G ";
$reqGroupes .= "ORDER BY G.grp_nom ;";

    $TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);
    $code_groupe = 1;

$TBS->Show();
//on ferme la connexion
mysql_close($id_connexion);
?>

3- page contenu.php:
<?php
include_once('../../tbs/tbs_class.php');

if (isset($this)) {
  // On est dans le mode Sous-modèle de TBS =>
    //   les variables sont toujours locales, pas globales,
    //   et l'objet TBS est référencé par la variable locale $this.
    $TBS = &$this;
} else {
  // Ce sous-script peut aussi être exécuté en mode normal =>
  //  sont modèle correspondant sera affiché comme un modèle principal.
    $TBS = new clsTinyButStrong;
}

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

$TBS->Show() ;  // Quand cette méthode est appelé en mode Sous-modèle, le script principal n'est pas stoppé, et ce sous-modèle fusionné sera insérer dans le modèle principal.
//on ferme la connexion
mysql_close($id_connexion);
?>

4- fichier page contenu.html :
.......
<tr bgcolor=[var.tab_constantes.COUL_GRIS]>
        <td><b>Autoriser les groupes:</b></td>
        <td>
          <select name="Groupes[]" size="[bloc_groupes.#]" multiple>
        <option value="[bloc_groupes.code_groupe]">[bloc_groupes.grp_nom;block=option]</option>
        <option>[var.code_groupe;selected]</option>
        </select>
        </td>
    </tr>
.......

Vous voyez plus clair au problème?

Merci de m'aider.
By: Skrol29
Date: 2006-02-28
Time: 18:13

Re: pb de selected:Malgré le forum !

Ha ok, je vois bien le problème.

La balise TBS [onload;script=contenu.php;subtpl] situé dans le modèle principal est traitée lors du chargement du modèle (parce que c'est une balise [onload]).
C'est donc au chargement du modèle  ($TBS->LoadTemplate...) qu'est fusionné complètement le sous modèle : bloc + champs Var. Hors à cet instant, la variable globale $code_groupe n'existe pas encore.

Pour que l'item soit correctment sélectionné, il faut donc que $code_groupe soit défini avant la ligne $TBS->LoadTemplate... qui charge le modèle principal.
By: Toan
Date: 2006-03-01
Time: 10:55

Re: pb de selected:Malgré le forum !

Bjr,

Bah c'est le cas, c'est bien dans accueil.php que je déclare $code_groupe = "1";

et qui charge bien le template principal accueil.html:

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

$reqGroupes  = "SELECT G.code_groupe, G.grp_nom FROM Groupes G ";
$reqGroupes .= "ORDER BY G.grp_nom ;";

$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);
$code_groupe = 1;

$TBS->Show();
//on ferme la connexion
mysql_close($id_connexion);
?>

Comme je vous ai dit : l'item est bien sélectionné, mais il y a le message d'erreur de la variable globale! ;-)

donc que faire, car le noerr ne marche pas pour ne plus avoir le message d'erreur!

Merci de votre réponse.
By: Skrol29
Date: 2006-03-01
Time: 11:17

Re: pb de selected:Malgré le forum !

> Bah c'est le cas, c'est bien dans accueil.php que je
> déclare $code_groupe = "1";

Oui, mais il faut le déclarer avant le LoadTemplate().
Comme ça :
<?php
....
$TBS = new clsTinyButStrong;
$code_groupe = 1; // ICI OU AVANT
$TBS->LoadTemplate('../templates/accueil.html');

$reqGroupes  = "SELECT G.code_groupe, G.grp_nom FROM Groupes G ";
$reqGroupes .= "ORDER BY G.grp_nom ;";

$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);

$TBS->Show();
//on ferme la connexion
mysql_close($id_connexion);
?>

L'item semble être sélectionné dans la liste, mais à mon avis c'est le navigtateur qui sélectionne le premier item quand aucun n'est spécifié. Ca me le fait parfois dans certains cas. Si tu mets une valeur différente du premier item, ce sera toujours le premier qui sera sélectionné.
By: Toan
Date: 2006-03-01
Time: 11:52

Re: pb de selected:Malgré le forum !

Comme tout bon soldat, j'ai fait comme tu as dit:

accueil.php:
<?php
...
$TBS = new clsTinyButStrong;
$code_groupe = "1";
$TBS->LoadTemplate('../templates/accueil.html');

//requete
$reqGroupes  = "SELECT G.code_groupe, G.grp_nom FROM Groupes G ";
$reqGroupes .= "ORDER BY G.grp_nom ;";

//blocs des groupes
$TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);

$TBS->Show();
//on ferme la connexion
mysql_close($id_connexion);
...

C'est un 1 qui s'ajoute à la fin et qui est sélectionnée! :-((

<option selected="selected">1</option>

code source html généré:
.....
<select name="Groupes[]" size="9" multiple>
        <option value="1">Administrateurs</option><option value="7">Administratif</option><option value="2">Commerciaux</option><option value="6">Comtabilité</option><option value="3">Direction</option><option value="9">Formation</option><option value="8">Graphisme/Communication</option><option value="5">Produits</option><option value="4">Ventes</option>
       
        <option selected="selected">1</option></select>
.....

help!
By: Skrol29
Date: 2006-03-01
Time: 12:12

Re: pb de selected:Malgré le forum !

Ok, je comprend pourquoi, excuse-moi de ne pas avoir vu le truc avant.
Je donne des explications plus bas, mais voici déjà un moyen de s'en sortir :

Dans ton sous modèle "contenu.html", remplace :
[var.code_groupe;selected]
par :
[code_groupe;selected]

Et on va fusionner manuellement ce champ.
Côté PHP, ajoute la ligne suivante APRES le MergeBlock():
$TBS->MergeField('code_groupe',$code_groupe);

Et hop, c'est dans la boîte.

Explications du pb : c'est bien un problème de logique de sous-modèle. Le champ [var.code_groupe;selected] du sous-modèle est fusionné lors du LoadTemplate() principal, donc avant la fusion de ton bloc "bloc_groupes". Pour être cohérent, il faudrait que ce bloc soit fusionné dans le sous-script qui le charge. C'est à dire que en théorie, $TBS->MergeBlock('bloc_groupes',..) serait mieux placé dans "contenu.php".
By: Toan
Date: 2006-03-01
Time: 12:21

Re: pb de selected:Malgré le forum !

Ouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuf !

ça marche! ;-)

Merci encore.
By: Skrol29
Date: 2006-03-01
Time: 13:11

Re: pb de selected:Malgré le forum !

Au fait, pourquoi inserts-tu "contenu.html" via un script, plutôt que par le paramètre "file=" ?
By: Toan
Date: 2006-03-01
Time: 14:30

Re: pb de selected:Malgré le forum !

Au fait je code à la
fusebox
tu connais?

Car mon contenu est aussi dynamique:

Le vrai accueil.php:
<?
...
//template du contenu
if (!isset($_GET['page'])) {
    include("./includes/bienvenue.inc");
    $page_courante = "bienvenue";
    }
else
    {
    include("./includes/$_GET[page].inc");
    $page_courante = $_GET["page"];
    }

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

//*********************************MENU DYNAMIQUE*************************************

//début de la requête commune
$reqCommuneDebut  = "SELECT M.* FROM Menus M, Acceder A, Groupes G ";
$reqCommuneDebut .= "WHERE (M.code_menu = A.code_menu) ";
$reqCommuneDebut .= "AND (A.code_groupe = G.code_groupe) ";
$reqCommuneDebut .= "AND (M.men_actif = 'oui') ";
$reqCommuneDebut .= "AND (G.code_groupe = $_SESSION[groupe_code]) ";
//fin de la requete commune
$reqCommuneFin    = "ORDER BY M.men_ordre ;";

//les requetes des menus de niveau 1
$reqNiveau1       = $reqCommuneDebut."AND M.men_niveau = 0 ".$reqCommuneFin;

//les requetes des menus de niveau 2
$reqNiveau2       = $reqCommuneDebut."AND M.men_niveau = 1 ";
$reqNiveau2      .= "AND (M.men_parent = %p1%)".$reqCommuneFin;

//***********************************FIN MENU DYNAMIQUE     */                                 */

//blocs des menus
$TBS->MergeBlock('niveau1', $id_connexion, $reqNiveau1);
$TBS->MergeBlock('niveau2', $id_connexion, $reqNiveau2);

switch($page_courante){
        case "ajout_menu":
            //selectbox des ordres d'affichage
            $TBS->MergeBlock('bloc_ordres',$tab_ordre) ;
            //blocs des menus parents
            $TBS->MergeBlock('bloc_parents', $id_connexion, $reqMenusPeres);
            //blocs des groupes
            $TBS->MergeBlock('bloc_groupes', $id_connexion, $reqGroupes);
            $TBS->MergeField('code_groupe',$code_groupe);
            break;
        default:
            ;
        } // switch

$TBS->Show();
//on ferme la connexion
mysql_close($id_connexion);
?>

et contenu.php:
<?
...
if (isset($this)) {
  // On est dans le mode Sous-modèle de TBS =>
    //   les variables sont toujours locales, pas globales,
    //   et l'objet TBS est référencé par la variable locale $this.
    $TBS = &$this;
} else {
  // Ce sous-script peut aussi être exécuté en mode normal =>
  //  sont modèle correspondant sera affiché comme un modèle principal.
    $TBS = new clsTinyButStrong;
}

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

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

$TBS->Show() ;  // Quand cette méthode est appelé en mode Sous-modèle, le script principal n'est pas stoppé, et ce sous-modèle fusionné sera insérer dans le modèle principal.
//on ferme la connexion
mysql_close($id_connexion);
?>

et chaque contenu est chargé dynamiquement par accueil.php?page=ma_page_contenu_a_charge

tu vois mieux le scimiliblick?

@+
By: Skrol29
Date: 2006-03-01
Time: 16:14

Re: pb de selected:Malgré le forum !

Salut,

Non je ne connaissais pas. Je vois sur Google, que ça vient du monde ColdFusion. Intéressant ...
By: Toan
Date: 2006-03-01
Time: 16:42

Re: pb de selected:Malgré le forum !

Bonjour,

Exact, car mon premier language dédié au web c'était coldfusion !

Il y a un site sur la méthode :

les extensions c'est *.cfm

@+