Categories > TinyButStrong general (FR) >

fusion de champs imbriqués

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Eldarion
Date: 2006-07-08
Time: 15:45

fusion de champs imbriqués

Bonjour,

je me casse les dents depuis un moment sur la fusion de champs imbriqués. ça doit être un problème récurrent mais je n'ai pas trouvé de solution qui fonctionne chez moi en parcourant le manuel et le forum.

pour résumer, je dois fusionner un champs de ce type :

[aaa.val.url_avatar;p1=[bbb.val.id;p1=[ccc.$]]]

et après fusion, je me retrouve avec ceci en sortie :
[aaa.val.url_avatar;p1=142]
par exemple.


et là je ne sais pas comment faire pour forcer la fusion de ce dernier champ :-/


Je remercie d'avance le bienfaiteur qui passera dans le coin !!
By: Skrol29
Date: 2006-07-08
Time: 15:49

Re: fusion de champs imbriqués

Salut,

Tes champs sont liés à des blocs différents aaa,bbb,ccc.
Vu l'imbication, tu dois fusionner dans l'odre siuvant :
$TBS->MergeBloc('ccc',...);
$TBS->MergeBloc('bbb',...);
$TBS->MergeBloc('aaaa',...);

Il ne te manque plus que la fusion du aaa.
By: Eldarion
Date: 2006-07-08
Time: 16:18

Re: fusion de champs imbriqués

c'est gentil d'avoir répondu si vite =)

mais c'est ce que je fais (en plus complexe) et ça ne fonctionne pas.

en fait coté html j'ai ceci :

<table width="670">
    <tr>
    <td><br /><b>Titre :</b> [musiques_deja_diffusees.titre;block=tr]<br /><br />
      <table>
        <thead>
            <tr>
                <th scope="col">Bee</th>
                <th scope="col">.......</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>[anciens_bee.val.pseudo;p1=[anciens_diffuseurs.val.id_bee;p1=[musiques_deja_diffusees.$]]]</td>
                <td>....</td>
            </tr>
        </tbody>
      </table>
      <hr />
    </td>
    </tr>
</table>

et côté PHP :

$nbr = $TBS->MergeBlock('mb','array','musiques_diffusees');
if ($nbr>0) { $TBS->MergeBlock('sb','array','musiques_diffusees[%p1%][les_bee]'); }

$nbr = $TBS->MergeBlock('musiques_deja_diffusees','array','musiques_deja_diffusees');
if ($nbr>0) { $TBS->MergeBlock('anciens_diffuseurs','array','musiques_deja_diffusees[%p1%][les_bee]'); }

$nbr = $TBS->MergeBlock('bee_anciens_diffuseurs','array','bee_anciens_diffuseurs');
if ($nbr>0) { $TBS->MergeBlock('anciens_bee','array','bee_anciens_diffuseurs[%p1%]'); }

désolé pour les noms de variables pourries :p

donc voilà je me demandais s'il était possible de récupérer le résultat d'une première fusion ($fusion1 = $TBS->Source) mais surtout de refaire une moulinette du genre $TBS->LoadTemplate($fusion1); (qui ne fonctionne pas) ?

ça résoudrait pour moi un autre problème, celui des variables contenues dans des variables.

je précise que faire
$TBS->Show(TBS_NOTHING);
$TBS->Show();

ne règle rien, mais ça doit être normal :-(
je suis encore sur la vieille version 2.05, passer à la 3.1 va me demander pas mal de taff.

merci !
By: Eldarion
Date: 2006-07-08
Time: 16:52

Re: fusion de champs imbriqués

j'ai finalement remodelé ma structure de données dans le PHP, même si ça consomme plus de mémoire vive au final :-/

Par contre le 2ème problème est vraiment important pour moi, car il s'agit de l'implémentation d'un système de gestion multilingue.
J'ai des phrases dynamiques du genre "Machin a gagné 3 points."
Le template comporte en effet la phrase "Machin a gagné [var.points] points."
Et pour avoir ça en anglais par exemple, la traduction anglaise doit être du type "Sb has won [var.points] points."

Et bien sûr ces traductions sont conservées en base de donnée, qui sont accessibles par TBS grâce à un tableau, l'appel de la traduction se fait ainsi :
[var.translations.ma_phrase;protect=no;htmlconv=look]

ça fonctionne très bien si la variable en question était une variable simple, et non un tableau (testé), en évaluant 2 fois le tempate avec
$TBS->Show(TBS_NOTHING);
$TBS->Show();

voilà s'il existe une autre méthode je suis preneur ;-)
By: Skrol29
Date: 2006-07-08
Time: 18:39

Re: fusion de champs imbriqués

Bon,

Pour ton 1° problème qui semble reglé, on peut déjà signaler que tu fucionne le bloc "bee_anciens_diffuseurs" alors qu'il n'appraît nulle part dans le modèle. Donc $nbr=0 à chaque fois et donc le bloc "anciens_bee" n'est jamais fusionné.


Pour ton 2° pb, tu peux forcer la fusion des champs var avant la fin :
TBS 2.x :
$TBS->MergeSpecial('var');
TBS 3.x :
$TBS->MergeField('var');

Et pour charger un modèle :
$TBS->Source = $fusion1;
Mais après tu dois forcer l'évaluation des champs [onload] manuèlement avec la même technique que les [var] ci-dessus.
By: Eldarion
Date: 2006-07-08
Time: 18:55

Re: fusion de champs imbriqués

problème n°1 => je suis un boulet

problème n°2 => merci !
je testerais ça ce soir =)

Bonne continuation pour TBS
By: Eldarion
Date: 2006-07-09
Time: 10:53

Re: fusion de champs imbriqués

super ça marche en refusionnant les blocs nécessaires après le $TBS->MergeSpecial('var');

merci pour votre aide !