Categories > TinyButStrong general >

help with dynamic tables

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: help with dynamic tables
Date: 2006-10-09
Time: 13:28

help with dynamic tables

my test code looks like this.

php code;

$nbr_col = 8;
$nbr_row = 8;
for ($col = 1; $col <= $antalperlinie; $col++){
    $columns[$col] = 'column_'.$col;
}

$data = array();
for ($row=1;$row<=$nbr_row;$row++) {
    $record = array();
    for ($col=1;$col<=$nbr_col;$col++) {
        $record[$columns[$col]] = $row * $col;
    }
    $data[$row] = $record;
}

$TBS = new clsTinyButStrong;
$TBS -> LoadTemplate('templates/index2.tpl');
$TBS -> MergeBlock('aps',$apsoption);
$TBS->MergeBlock('c2',$columns);
$TBS->MergeBlock('r',$data);
$TBS -> Show();

template:

<table border="1" align="center" cellpadding="0" cellspacing="0">
   <tr bgcolor="#F0F0F0">
        <td width="30" bgcolor="#FFFFFF"><div align="center">
        <div align="center">[r.$;block=tr]</div>
            [r.[c2.val;block=td]]
        </div>
        </td>
    </tr>
</table>

i have two problems.
1) the easy one i think. Can i do [r.$;block=tr] so that is not writing anything and just do the tr?

2) the big problem. for each tr i'll need to make an extra tr with a colspan of [var.nbr_col] how can i do this? remeber it still needs to be dynamic

ps. the $data will be mysql data when its all done, this is just for testing
By: Skrol29
Date: 2006-10-10
Time: 19:53

Re: help with dynamic tables

Hi,

1) [r;block=tr] works fine for this

2) Extend you block like this:
<tr> [r.block=tr+tr] ... </tr>
<tr> ... </tr>

By: kasper
Date: 2006-10-18
Time: 01:30

Re: help with dynamic tables

i just get

TinyButStrong Error in field [r.block...] : item 'block' is not an existing key in the array.
By: Skrol29
Date: 2006-10-18
Time: 01:40

Re: help with dynamic tables

It was a mistake, correct code should be like this:
<tr> [r;block=tr+tr] ... </tr>
<tr> ... </tr>
By: kasper
Date: 2006-10-18
Time: 02:33

Re: help with dynamic tables

ok is what u mean now but [r;block=tr+tr] echos array

table border="1" align="center" cellpadding="0" cellspacing="0">
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center"></div>
            1 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            2 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            3 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            4 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            5 </div></td>
        </tr>
By: kasper
Date: 2006-10-18
Time: 16:06

Re: help with dynamic tables

in other words after the first cell in each row [r;block=tr+tr] prints "array" why is that?


table border="1" align="center" cellpadding="0" cellspacing="0">
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">[r;block=tr+tr]</div>
            [r.[c2.val;block=td]] </div></td>
        </tr>
         <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FFFFFF" colspan="[var.antalperlinie]"><div align="center">test</div></td>
        </tr>
      </table>



<tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center"></div>
            1 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            2 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            3 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            4 </div></td><td width="30" bgcolor="#FFFFFF"><div align="center">
            <div align="center">Array</div>
            5 </div></td>
        </tr>
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FFFFFF" colspan="5"><div align="center">test</div></td>
        </tr>
By: Skrol29
Date: 2006-10-18
Time: 16:59

Re: help with dynamic tables

Hi Kasper,

You have this strange behavior because the tag [r;block=tr+tr] is repeated for each <td> when block "c2" is merged.
Then, the first tag [r;block=tr+tr] is used for the block definition (you can see that at the first cell, it doesn't appear), and other same tags that follow are used to try to merge data. Thta's why you have Array() instead.

The avoid this behavior, just move the tag [r;block=tr+tr] outside the area of block "c2".
For exemple:
<table border="1" align="center" cellpadding="0" cellspacing="0">
  <tr bgcolor="#F0F0F0">
     [r;block=tr+tr]
     <td width="30" bgcolor="#FFFFFF">
       <div align="center">[r.[c2.val;block=td]] </div>
     </td>
  </tr>
  <tr bgcolor="#F0F0F0">  
    <td width="30" bgcolor="#FFFFFF" colspan="[var.antalperlinie]">
      <div align="center">test</div>
    </td>
  </tr>
</table>

By: kasper
Date: 2006-10-19
Time: 04:57

Re: help with dynamic tables

ok i think i got it all now but i have a problem with sub-blocks.

i have writen some more on the code and it now looks like this

///THE PHP:
$nbr_row = $antalperside / $antalperlinie;
for ($col = 1; $col <= $antalperlinie; $col++){
    $columns[$col] = 'column_'.$col;
}


$data = array();
$row = 1;
$col = 1;
$count = 0;
while($resultat = mysql_fetch_array($find_ressultet)){
    $data[$row]["column_".$col]["id"] = $resultat['id'];
    $data[$row]["column_".$col]["mediumx"] = $resultat['mediumx'];
    $data[$row]["column_".$col]["mediumy"] = $resultat['mediumy'];
    $data[$row]["column_".$col]["mediumyp"] = $resultat['mediumy'] +20;
    $data[$row]["column_".$col]["taeller"] = $resultat['taeller'];
    $data[$row]["column_".$col]["dato"] = $resultat['dato'];
    $data[$row]["column_".$col]["datosp"] = datesplitter($resultat['dato']);
    $data[$row]["column_".$col]["x"] = $resultat['x'];
    $data[$row]["column_".$col]["y"] = $resultat['y'];
    $data[$row]["column_".$col]["str"] = $resultat['str'];
    $data[$row]["column_".$col]["filnavn"] = $resultat['filnavn'];
    $data[$row]["column_".$col]["upload_af"] = $resultat['upload_af'];
    $data[$row]["column_".$col]["count"] = $count;
   
    $base = "cms_billedDB";
    include'../mysql.inc';
    $find_kategoriger = mysql_query("            SELECT DISTINCT kategorier.tekst, kategorier.id         FROM kategorier, link                     WHERE link.billed_id = '$resultat[id]'            AND kategorier.id = link.kategori_id            ");
    mysql_close($connection);
       
    while($kategori = mysql_fetch_array($find_kategoriger)){
        $data[$row]["column_".$col]['kdata'][] = array('id' => $kategori[id], 'tekst' => $kategori[tekst]);
    }
   
    $count++;
    if($col == $antalperlinie){
        $row++;
        $col = 1;
    }else{
        $col++;
    }
}

$linksoter = urllink('soter');
$linksoterr = urllink('soterr');
$linkaps = urllink('aps');

$TBS = new clsTinyButStrong;
$TBS -> LoadTemplate('templates/index2.tpl');
$TBS -> MergeBlock('aps','array',$apsoption);
$TBS -> MergeBlock('col','array',$columns);
$TBS -> MergeBlock('kdata','array','$data[%p1%][%p2%][kdata]');
$TBS -> MergeBlock('cell','array',"data");
$TBS -> Show();

/// A PREVIEW OF THE $DATA ARRAY
Array
(
    [1] => Array
        (
            [column_1] => Array
                (
                    [id] => 880
                    [mediumx] => 450
                    [mediumy] => 600
                    [mediumyp] => 620
                    [taeller] => 4
                    [dato] => 0000-00-00
                    [datosp] => 00/??/0000
                    [x] => 2112
                    [y] => 2816
                    [str] => 1537
                    [filnavn] => STA60044.JPG
                    [upload_af] => kv
                    [count] => 0
                    [kdata] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 1
                                    [tekst] => tmp
                                )

                        )

                )
...

AND LITTLE OF THE TEMPLATE
<table border="1" align="center" cellpadding="0" cellspacing="0">
        <tr>
          [cell;block=tr+tr]
          <td align="center" valign="top" width="150" height="100">
            <div width="150" height="150" onMouseOver="info('vis',[cell.$])" onMouseOut="info('',[cell.$])" style="width:150px; height:118px;">
            <img src="bdbgen.php?id=[cell.[col.val;block=td].id]&str=1" border="0" valign="middle" style="cursor: hand;" onClick="popup('bdbpopup.php?id=[cell.[col.val].id]&h=[cell.[col.val].mediumyp]&w=[cell.[col.val].mediumx]&str=2','popup',[cell.[col.val].mediumx],[cell.[col.val].mediumyp]);">
            </div>
       
                        <div id="infoboxkat[cell.[col.val].count]" style="display:none;">
<a href="index.php?katid=[kdata.id; block=a; p1= [cell.$]; p2= [col.val]]"></a>
</div>
        </span>
       
        <span onMouseOver="info('hojr', [cell.$]);" onMouseOut="info('',[cell.$]);">
        <img src="gfx/hojr.gif" style="cursor: hand;" onclick="document.location = 'bdrot.php?[var.server.QUERY_STRING; if [val] == ''; then id=[cell.[col.val].id]; else [var.server.QUERY_STRING]&id=[cell.[col.val].id]]&vej=hoj'">
        </span>
            </td>
        </tr>
<tr>
          <td id="raekke[cell.$]" colspan="[var.antalperlinie]" align="center" style="color:#F8A426; background-repeat:repeat-x;">&nbsp;</td>
        </tr>
      </table>

the problem is that i'll get

TinyButStrong Error when merging block [kdata] : invalid query '$data[[cell.$]][column_1][kdata]' because global variable '$data' is not found.

why does it write [cell.$] and not that value. it works other places in the code.

by the way thanx for all ur help until now. tinybutstrong is alittle hard to get into when u haven't tryed before but after that i goes fast.
By: kasper
Date: 2006-10-19
Time: 05:05

Re: help with dynamic tables

ofcause ill need to do this

$TBS -> MergeBlock('cell','array',"data");
$TBS -> MergeBlock('kdata','array','$data[%p1%][%p2%][kdata]');

insted of this

$TBS -> MergeBlock('kdata','array','$data[%p1%][%p2%][kdata]');
$TBS -> MergeBlock('cell','array',"data");

but i still get TinyButStrong Error when merging block [kdata] : invalid query '$data[1][column_1][kdata]' because global variable '$data' is not found.
By: kasper
Date: 2006-10-19
Time: 05:59

Re: help with dynamic tables

ok i found out what was wrong.

1) it needs to be $TBS -> MergeBlock('kdata2','array','data[%p1%][%p2%][kdata]'); no $ infront of data

2) its not smart to call it kdata when the string is 'data[%p1%][%p2%][kdata]'