Categories > TinyButStrong general (FR) >

problèm de block conditionnel

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: nicky
Date: 2005-04-28
Time: 02:15

problèm de block conditionnel

[onload_test_check;block=span;when [art.Code_Art;onformat=tbs_get_presence_article]=0]
Je ne connais pas la solution, le problèm réside dans le faite, que  art.Code_Art afficherai bien la valeur 0, mais l'égalité n'est pas résolut, alors je ne sais plus, koi faire, j'en ai mar, lol,
By: Skrol29
Date: 2005-04-28
Time: 09:11

Re: problèm de block conditionnel

Salut,

L'égalité n'est pas résolue car [art.Code_Art;...] n'est pas fusionné quand [onload_test_check;...] est évalué.

Pour que le champ [art.Code_Art;...] soit fusionné automatiquement, il faudrait que ce soit un champ Var. Exemple : [var.Code_Art;...]

Si le champ [art.Code_Art;...] est fusionné manuèlement par un MergeField() ou un MergeBlock() après le chargement du modèle, alors il ne faut pas l'encapsuler dans un [onload] mais plutôt dans un [onshow]. Car les [onshow] sont évalué sur la méthode Show().


By: nicky
Date: 2005-04-28
Time: 10:28

Re: problèm de block conditionnel

<div style="float:left" class="fiche_mini_article">
    <div class="nom">
        <span>
            [art.Nom_Art;block=div;encaps=2]
        </span>
    </div>
    <div >
        <img class="image" style="float:left" src="[var.racine]images/scan/gf_art/[art.Scan_Art]">
        [art.Code_Art;onformat=tbs_get_presence_article]
            <span class="dispo_art">[art.Etat] </span><br>
            <span class="libell">Prix : </span>
            <span class="prix_art">[art.TTC_Art;frm='0,00€']</span><br>
            <span>
                [onshow_test_check;block=span;when [art.Code_Art;onformat=tbs_get_presence_article]=0]
                <input class="check_art" name="A" checked type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
                <span class="multi_art">Qté</span>
                <span>
                    <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="[art.Code_Art;onformat=tbs_get_presence_article]" OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
                </span>                           
            </span>
            <span>
                [onshow_test_check;block=span;default]
                <input class="check_art" name="A" type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
                <span class="multi_art">Qté</span>
                <span>
                    <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="1" disabled OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
                </span>
            </span>
    </div>           
</div>

voila mon code, je n'arrive toujours pas à le faite fonctionné, et cela fait tellement longtemps que je suis dessus, que je n'arrive plus a voire koi que ce soit, si tu peux m'aider ca serais extraordinaire, merci beaucoup
By: nicky
Date: 2005-04-29
Time: 16:50

Re: problèm de block conditionnel

<div>
    <div class="nom">
        <span>
            [art.Nom_Art;block=div;encaps=2]
        </span>
    </div>
        <span>
            [onload_test_check;block=span;when [art.Code_Art;onformat=tbs_get_presence_article]=0]
            <input class="check_art" name="A" checked type="checkbox" >
            <span>
                <input name="Nref[art.Code_Art]" value="[art.Code_Art;onformat=tbs_get_presence_article]" >
            </span>                           
        </span>
        <span>
            [onload_test_check;block=span;default]
            <input class="check_art" name="A" type="checkbox" >
            <span>
                <input name="Nref[art.Code_Art]" value="1" disabled >
            </span>
        </span>
    </div>           
</div>

Désolé d'encore d'embéter avec ca, mais je ne vois toujours pas comment faire mon compte là dessus, lorsque je merge un blocl, et que je le liste dans un template je ne peux pas utilisé de block conditionnel pour afficher tell ou telle chose
By: Skrol29
Date: 2005-04-29
Time: 17:22

Re: problèm de block conditionnel

Salut Nicky,

Il y a plusieurs trucs qui font que ça ne marche pas comme tu voudrais.

Premier truc : tes block [onload_test_check;...] sont vérifiés alors que les champs [art....] ne sont pas encore fusionnés. C'est parce que les champs [onload] sont traités lors du chargement du modèle, donc avant ton code MergeBlock() qui fusionne les block 'art'. Résultat => tous les conditions "where [art...]=0" sont systématiquement fausses.

Deuxième truc : en imaginant que le bloc 'art' fusionne plusieurs enregistrements et que les [onload_test_check;...] ne soient pas encore fusionnés (ce qui n'est pas possible à cause de l'explication vue plus haut, mais imaginons que ça fasse comme tu le souhaites). Quand le bloc conditionnel [onload_test_check;...] va être fusionné, il n'en gardera qu'un sur tous ceux présent. Un au total et non pas un par enregistrement. Donc plein d'enregistrement seront coupés à l'affichage.

Ce que je te conseille :
Utilise la dernière fonctionnalité de TBS 2.02 : les section conditionnelles de bloc ! Dans ton cas, ça donnerait quelque chose comme ça :
<div>
  <div class="nom">
    <span> [art.Nom_Art;block=div;encaps=2] </span>
  </div>
  <span>
    [art;block=span;when [art.Code_Art;onformat=tbs_get_presence_article]=0]
    <input class="check_art" name="A" checked type="checkbox" >
    <span>
      <input name="Nref[art.Code_Art]" value="[art.Code_Art;onformat=tbs_get_presence_article]" >
    </span>
  </span>
  <span>
    [art;block=span;default]
    <input class="check_art" name="A" type="checkbox" >
    <span>
      <input name="Nref[art.Code_Art]" value="1" disabled >
    </span>
  </span>
</div>

En fait il s'agit de renommer les blocs "onload_test_check" en "art".
Ca devrait marcher si tu as TBS minimum 2.02
By: nicky
Date: 2005-04-29
Time: 20:00

Re: problèm de block conditionnel

j'ai essayé mais a marche pas, je vais voire pkoi, mais pour le moment, marcha pas, lol, j'y retourne, j'espere que je vais  y arriver
By: nicky
Date: 2005-04-29
Time: 20:15

Re: problèm de block conditionnel

non, je ne vois pas du tout pkoi, si tu as un exemple, ca serais génial, la je ne vois pas du tout, et ca me bloque beaucoup pour l'avancé de mon site.


je liste des enregistrements sur une même page, je les affiche dans des vignette, (enfin des balises div), puis, je fais un test  pour savoir, si un l'interieur  de cette vignette, j'affiche, telle ou telle information.
By: Skrol29
Date: 2005-04-29
Time: 20:47

Re: problèm de block conditionnel

Ok, il faut que tu donnes un maximum d'indice et de précisions si tu veux qu'on puisse t'aider.
Quelle version de TBS utilises-tu ?
Combien as-tu d'enregsitrement à fusionner ?
Arrives-tu à faire une fusion normale des enreg sans bloc conditionel ?
Qu'est-ce qui ne marche pas ? On plutôt qu'observes tu comme résultat ?
By: nicky
Date: 2005-04-29
Time: 22:19

Re: problèm de block conditionnel

fichier :test.tpl
function tbs_get_presence_article($NomBloc,&$CurrVal){
   
    $Tableau_panier["9782845990166"]=5;
    $Tableau_panier["9782845990227"]=1;
    $Tableau_panier["9782845990449"]=2;
    $Tableau_panier["9782845990807"]=1;
   
    if(isset($Tableau_panier[$CurrVal])){   
        $CurrVal    =    $Tableau_panier[$CurrVal];
    }
    else{
        $CurrVal    =    0;   
    }
}   

$test_array[1]["Nom_Art"]="3X3 EYES 1";
$test_array[1]["Code_Art"]="9782845990166";
$test_array[1]["Etat"]="Disponible";
$test_array[1]["TTC_Art"]="6.95";
$test_array[2]["Nom_Art"]="3X3 EYES 2";
$test_array[2]["Code_Art"]="9782845990173";
$test_array[2]["Etat"]="Disponible";
$test_array[2]["TTC_Art"]="6.95";
$test_array[3]["Nom_Art"]="3X3 EYES 3";
$test_array[3]["Code_Art"]="9782845990180";
$test_array[3]["Etat"]="Disponible";
$test_array[3]["TTC_Art"]="6.95";
$test_array[4]["Nom_Art"]="3X3 EYES 4";
$test_array[4]["Code_Art"]="9782845990197";
$test_array[4]["Etat"]="Disponible";
$test_array[4]["TTC_Art"]="6.95";
$test_array[5]["Nom_Art"]="3X3 EYES 5";
$test_array[5]["Code_Art"]="9782845990203";
$test_array[5]["Etat"]="Disponible";
$test_array[5]["TTC_Art"]="6.95";

include_once('tbs_class.php');
$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('test.tpl') ;       
$TBS->MergeBlock('art',$test_array) ;
$TBS->show();


fichier : test.php
<div class="fiche_mini_article">
    <div class="nom">
        <span>
            [art.Nom_Art;block=div;encaps=2]
        </span>
    </div>
    <div style="border-style:solid;border-width:1px;width:250px">
            [art.Code_Art;onformat=tbs_get_presence_article]
            <span class="dispo_art">[art.Etat] </span><br>
            <span class="libell">Prix : </span>
            <span class="prix_art">[art.TTC_Art;frm='0,00€']</span><br>
            <span>
                [art;block=span;when [art.Code_Art;onformat=tbs_get_presence_article]=0]
                <input class="check_art" name="A" checked type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
                <span class="multi_art">Qté</span>
                <span>
                    <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="[art.Code_Art;onformat=tbs_get_presence_article]" OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
                </span>                           
            </span>
            <span>
                [art;block=span;default]
                <input class="check_art" name="A" type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
                <span class="multi_art">Qté</span>
                <span>
                    <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="1" disabled OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
                </span>
            </span>
    </div>           
</div>

et le fichier  de TBS

le resultat obtenu devrait afficher qu'une check box, et non les deux, enfin dans tout les cas, voila, je sais plus koi faire, le pire, c ke, ca doit étre tout simple.
By: nicky
Date: 2005-04-29
Time: 22:21

Re: problèm de block conditionnel

oups désolé, je voulais afficher qu'une seul check box par articles, et certains articles devrai avoir une check_box coché et un chiffre supérieur à 1 à ca droite de le champs;
By: Skrol29
Date: 2005-04-30
Time: 14:31

Re: problèm de block conditionnel

Salut Nicky,

Bon autant pour moi. La solution que je t'ai donné ne marche pas parce que les blocs conditionnels sont encapsulés dans le block normal.

Voici une autre solution que je testé et qui marche. Elle est basée sur l'utilisation des balises magnet pour supprimer une zone.

Il faut d'abord modifier la fonction tbs_get_presence_article() comme suit :
function tbs_get_presence_article($NomBloc,&$CurrVal,&$PrmLst){

    $Tableau_panier["9782845990166"]=5;
    $Tableau_panier["9782845990227"]=1;
    $Tableau_panier["9782845990449"]=2;
    $Tableau_panier["9782845990807"]=1;
   
    if(isset($Tableau_panier[$CurrVal])){
      $CurrVal = $Tableau_panier[$CurrVal];
    } else {
      $CurrVal = 0;
    }
   
    if (isset($PrmLst['pres'])) {
        if ( (($PrmLst['pres']=='0') and ($CurrVal==0)) or (($PrmLst['pres']=='x') and ($CurrVal!=0)) ) {
            $CurrVal = ' '; // affiché
        } else {
            $CurrVal = ''; // masqué
        }
    }
   
}

Et voici le template qui convient.
Seul deux balises ont été modifiées.
<div class="fiche_mini_article">
    <div class="nom">
        <span>
         [art.Nom_Art;block=div;encaps=2]
        </span>
    </div>
    <div style="border-style:solid;border-width:1px;width:250px">
         [art.Code_Art;onformat=tbs_get_presence_article]
         <span class="dispo_art">[art.Etat] </span><br>
         <span class="libell">Prix : </span>
         <span class="prix_art">[art.TTC_Art;frm='0,00€']</span><br>
         <span>
            [art.Code_Art;onformat=tbs_get_presence_article;magnet=span;pres=0]
            <input class="check_art" name="A" checked type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
            <span class="multi_art">Qté</span>
            <span>
             <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="[art.Code_Art;onformat=tbs_get_presence_article]" OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
            </span>     
         </span>
         <span>
            [art.Code_Art;onformat=tbs_get_presence_article;magnet=span;pres=x]
            <input class="check_art" name="A" type="checkbox" onclick="go_panier(this.value,this.checked)" value="[art.Code_Art]" >
            <span class="multi_art">Qté</span>
            <span>
             <input class="quantite_art" id="[art.Code_Art]" name="Nref[art.Code_Art]" value="1" disabled OnKeyPress="press_number_only(2)" onblur="if(this.value<1){this.value=1}">
            </span>
         </span>
    </div> 
</div>
By: nicky
Date: 2005-05-03
Time: 00:07

Re: problèm de block conditionnel

Ke dire de plus et de mieux, ke, merci, merci, et merci, j'en fais un peu trop, mais, je bloqué vraiment, ca me parait étonnant que n'on puisse le faire dans le principe que j'avais utilisé, mais le principal ce qu'il y ait une solution, et tu me l'a donnée, donc merci.



Et oui c vrai, merci encore pour tout