Categories > TinyButStrong general (FR) >

headergrp

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: nicky45
Date: 2005-08-16
Time: 19:49

headergrp

    <div class="cadre">
        <div class="nouveautes_articles">
   
            <span class="cadre">
                <span>
                    <div class="entete">
                        [blk_nouveaute.[blk_row.val;block=span].[blk_coll.val;block=div;encaps=2].Nom_Cat;headergrp.Nom_Cat;block=div]
                    </div>
                    <span>
                       
                        [blk_nouveaute.[blk_row.val;block=span].[blk_coll.val;block=div].Nom_Art]<br/>
                    </span>
                </span>
            </span>
        </div>
    </div>

voici mon code, ca ne marche pas, et je ne sais pas comment faire, le problèm réside dans le headergrp avec lequel je n'arrive pas à remplir la fonction prévu
By: Skrol29
Date: 2005-08-16
Time: 20:54

Re: headergrp

Bonjour,

Il faut écrire
  headergrp=Nom_Cat
au lieu de
  headergrp.Nom_Cat

Mais surtout il y a que tes sections de blocs sont entremélées.
La deuxième section de "blk_row" est contenue dans la première. Je suppose qu'en fait tu souhaites qu'une seule section sur le <span class="cadre">, donc du niveau supérieur.
C'est un peu pareil pour "blk_coll" : il semble qu'il ne faille qu'une seule section. Enfin la première section "blk_nouveaute", qui est un header, est contenue dans la seconde section.
By: nicky45
Date: 2005-08-16
Time: 21:25

Re: headergrp

<!--nouveautes_articles_debut-->
<div class="nouveautes_articles">
    <table>
        <tr>
            <td class="cadre">
                <span>
                    <div class="entete">
                        [blk_nouveaute.[blk_row.val;block=span].[blk_coll.val;block=td].Nom_Cat]
                    </div>
                    <span>
                        [blk_nouveaute_2.[blk_row.val].[blk_coll.val].Nom_Art]<br/>
                    </span>
                </span>
            </td>
        </tr>
    </table>
</div>   
<!--nouveautes_articles_fin-->

je ne vois pas du tout comment faire. Tout s'affiche mais maintenant je veux laisser apparaitre que la balise "div de class entete" lorsque que c'est la premiere fois que le champs Nom_Cat apparait, je ne vois pas comment placer le "headergrp"
By: Skrol29
Date: 2005-08-16
Time: 23:23

Re: headergrp

C dépend de comment son organisées tes données.

Après avoir fusionné les lignes et colonnes, tu vas obtenir dynamiquement la définition d'un bloc "blk_nouveaute" qui fusionne un tableau Lig x Col.
Une telle défintion semble attendre un seul enregsitrement conteant lui même un tableau Array[lig][col].
Dans ce cas, un "hearder" ne sert à rien car il n'y a en fait qu'un seul enregsitrement dans la source de données.

Pourrais-tu donner un exemple de résultat attendu ?



By: nicky45
Date: 2005-08-17
Time: 09:49

Re: headergrp

http://kaobang.com/site2/pages/acceuil.php resultat du script, je veux que chaque titre, par exemple le titre "BD" n'apparaisse qu'une fois (la premiere)
By: Skrol29
Date: 2005-08-17
Time: 16:08

Re: headergrp

Ok je vois ce que tu cherches à faire mais je ne suis pas sûr de comprendre la logique de présentation car a priori le nombre d'item à afficher est dynamique alors que tes cadres semblent figés en hauteur et semblent avoir une répartition égale des info, header compris.

Pour le header c'est ok, mais après, comment doivent se répartir les infos dans les différents cadres (les trois colonnes) ? Il s'agit de remplire une colonne, puis l'autre, puis la troisième ? Si c'est cela, comment se passent les débordements, quand il y a + de données ? Le gourpe "bd" peut-il est scindé sur deux colonnes ?.
By: nicky45
Date: 2005-08-17
Time: 16:48

Re: headergrp

//récupère le résultat de la requete
    $rslt_nouveaute    =   $Conn->get_result();
   
//récupére le nombre d'enregistrement
    $nbr_enregistrement    =    $Conn->get_total_rows();

//systèm de séléction d'affichage nombre de colonne par rapport au  nombre d'enregistrement
    if ($nbr_enregistrement<=10){
        $nbr_blk =1;
    }   
   
    if ($nbr_enregistrement>10){
        $nbr_blk =2;
    }

    if ($nbr_enregistrement>20){
        $nbr_blk =3;
    }


//nombre d'enregistremenr par colonne   
    $enregistrement_par_colonne    =$nbr_enregistrement/$nbr_blk;


//création du tableau de colonne   
    $columns = array();
    for ($i=1;$i<=$nbr_blk;$i++){
        $columns[$i] = 'column_'.$i;
    }   
//création du tableau de ligne
    $rows = array();
    for ($i=1;$i<=$enregistrement_par_colonne;$i++){
        $rows[$i] = 'row_'.$i;
    }   
   
       
//création du tableau
    $blk_nouveaute        = array();
   
//initialisation des variables
    $i=0;
    $coll=1;
    $row=0;
    //boucle sur tout les enregistrement
    while ($r=mysql_fetch_array($rslt_nouveaute)){
        //agrementation des compteurs  et enregistrement d'une valeur
        $i++;
        $row++;
        $blk_nouveaute[$rows[$row]][$columns[$coll]]    = $r;
               
        //si le compteur et égal ou supérieur au nombre de nouveauté par colonne
        if($i>=$enregistrement_par_colonne){
            $test    .=$i."<=".$enregistrement_par_colonne.";\n";
            $i=0;
            $coll++;
            $row=0;
        }
    }

    $blk_nouveaute    =    Array($blk_nouveaute);

voici en gros le code php utilisé, il n'ai pas totalement au point je supose mais je le modifirais au fure et à mesure.

ici il y  prinicpalement des bd, mais il peut y avoir d'autre entête, la répartition par colonne fait parti d'un algorithme, le nombre de colonne également, si il y a moins de 10 articles par exemple, il n'y aura qu'une colone, l'entête d'une catégorie peux apparaitre sur la colonne de gauche ainsi que son contenu, et se continué sur la colonne suivante...

En gros voila l'idée, d'avance merci
By: Skrol29
Date: 2005-08-17
Time: 18:29

Re: headergrp

Ok, je crois que je comprend bien. Effectivement c'est un peu compliqué à faire, mais je crois que j'ai trouvé un truc, et qui finalement est assez simple si on prépare le terrain côté PHP.

Côté PHP, il faut ajouter un champ à chaque enregistrement qui donne l'id de la colonne. L'id de la colonne peut être un chiffre ou une lettre, qu'importe car on ne va s'en servir que pour détecter son changement à l'aide d'une section "splittergrp".
On ne peut pas calculer l'id de la colonne à l'aide d'une fonction "onsection" car les sections de groupe "splittergrp" et "headergrp" sont traitées avant.

Voici le code que j'ai utilisé pour mon test et qui s'inspire de ton algo de calcul de colonne :
$iMax = count($data);
for ($i=1;$i<=$iMax;$i++) {
  if ($i<=10) {
    $data[$i-1]['colnum'] = 'A';
  } elseif ($i<=20) {
    $data[$i-1]['colnum'] = 'B';
  } else {
    $data[$i-1]['colnum'] = 'C';
  }
}

Côté HTML, on s'en tire avec une section "headergrp" pour les catégories, plus une section "splittergrp" pour couper en colonnes.
Voici ce que ça peut donner :
<table>
  <tr>
    <td>
      <div class="entete">[d.cat;headergrp=cat;block=div]</div>
      <div class="titre">[d.nom;block=div]</div>
      [d;block=begin;splittergrp=colnum]</td><td>[d;block=end]
    </td>
  </tr>
</table>

Voilà, avec ça, un simple
  $TBS->MergeBlock('d',$data);
fusionne le tout correctement. J'ai testé et ça fonctionne bien pour moi.

By: nicky45
Date: 2005-08-17
Time: 20:37

Re: headergrp

oui, j'ai adapté tout ca à mon script, et tout fonctionne comme je voulais, maintenant j'ai d'autre modif à faire mais ca reste mon problèm, merci beaucoup, j'avais jamais uitlisé splittergrp, c'est trés trés bien tout ca,

encore merci, et bravo pour tout ca....