Categories > TinyButStrong general (FR) >

Fusion de deux blocs de même nom

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: nohrad
Date: 2007-03-14
Time: 18:38

Fusion de deux blocs de même nom

Dans un de mes développement je suis amené à fusionner des blocs dynamiquement (pour simplifier, disons que je récupère le nom des locs à fusionner depuis une BDD).

Le code PHP ressemble à cela

foreach ($blocks as $block_name => $block_param)
   {
     $block_val = is_array($block_param) ? $block_param : array();
     $TBS->MergeBlock($block_name,$block_val);
   }

Du côté de mon code html voilà ce que cela donne (j'utilise { et } pour mes blocs TBS)
  <select onChange="ChangeUrl('redirect_station')" name="redirect_station" size="1">
     <option value="{list_station.lien}">{list_station.nom;block=option/;bmagnet=select}
  </select>

<!-- autres affichages de blocs non problématique -->

  <ul>
    <li><a href="{list_station.lien}">{list_station.nom;block=li;bmagnet=ul}</a></li>
  </ul>

Comme vous le voyez j'ai deux blocs TBS avec le même nom et la fusion se passe très mal.
Il faudrait que dans mon template le deuxième bloc s'appelle par exemple list_station2.
Seulement je n'ai aucun moyen de savoir dans mon code PHP que ce bloc a été défini puisque mon tableau $blocks ne contient que la valeur "list_station" et pas "list_station2".

Est-ce que vous voyez un moyen de résoudre ce problème ?

D'avance merci pour votre aide.
By: Skrol29
Date: 2007-03-15
Time: 01:20

Re: Fusion de deux blocs de même nom

Je te propose deux solutions :

Solution 1 : avec des sous blocs.

PHP :
$blocks = array('name1'=>array(...) , 'name2'=>array()...) // ici la récupération de tes données sous forme de tableau.
// la variable $blocks doit être globale.
$TBS->MergeBlock('liste','blocks[%1%]');
HTML:
<option>... {liste.nom;block=option/;p1=name1}
...
<li> ... {liste.nom;block=li/;p1=name2} ... </li>

Solution 2 : (mois cool)
Tu donnes un nom différents aux deux blocs, et après ton code PHP, tu refais sur les noms de bloc défini dans le modèle :
$TBS->MergeBlock($name,'clear');