Author Topic: Loop - Tabelle erzeugen  (Read 1266 times)

0 Members and 1 Guest are viewing this topic.

Crash

  • Guest
Loop - Tabelle erzeugen
on: Fri, 22. September 2006 - 10:58:11
Hallo.

Ich versuche gerade ein Tamplate zu basteln, womit ein eine Tabellen dynamisch und einfach erzeugen kann. Zum testen habe ich folgendes (statisches) Array:

Code: [Select]
$table = array(
    array ( // jeweils eine neue Tabelle
      table_id => test,
      table_class => test,
      table_summary => testing around,
      table_caption => töööö&st,
      table_head => array ( // Daten für den Header
        array ( // Jedes Array ist ein neues <tr>
          zelle eins, // Zelle 1 im ersten <tr>
          zelle zwei, // Zelle 2 im ersten <tr> usw.
        ),
        array (
          zelle drei,
          zelle vier,
        )
      ),
    )
  );

Mein Template baut sich folgendermaßen auf:
Code: [Select]
<TMPL_LOOP name=table>
<table<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=table_border> border="<TMPL_VAR name=table_border>"</TMPL_IF><TMPL_IF name=table_spacing> cellspacing="<TMPL_VAR name=table_spacing>"</TMPL_IF><TMPL_IF name=table_padding> cellpadding="<TMPL_VAR name=table_padding>"</TMPL_IF><TMPL_IF name=table_summary> summary="<TMPL_VAR name=table_summary>"</TMPL_IF>>
<TMPL_IF name=table_caption>  <caption><TMPL_VAR name=table_caption></caption>
</TMPL_IF>
<TMPL_IF name=table_head>
  <thead>
<TMPL_LOOP name=table_head>
    <tr>
<TMPL_LOOP name=> <!-- hier stocke ich, wie geb ich nun die einzelnen Zellen aus? -->
      <th><TMPL_VAR name=></th>
</TMPL_LOOP>
    </tr>
</TMPL_LOOP>
  </thead>
</TMPL_IF>
[...]
</table>
</TMPL_LOOP>

Ist möglich die Werte ohne genau definierten Schlüssel auszugeben, so wie mit foreach?

Die Ausgabe sieht z.Z. so aus:
Code: [Select]
<table id="test" class="test" summary="testing around">
  <caption>töööö&amp;st</caption>
  <thead>
    <tr>
    </tr>
    <tr>
    </tr>
  </thead>
[...]
  </tbody>

</table>

Die trs sind schonmal vorhanden, aber die ths fehlen.

Danke.

Crash

  • Guest
Re: Loop - Tabelle erzeugen
Reply #1 on: Fri, 22. September 2006 - 12:06:02
Habs selbst hinbekommen, ist nicht ganz so einfach, ein so großes Array aufzubauen und es würde einfach gehen, wenn man etwas wie Foreach hätte, aber sonst sind die vlib-Klassen einfach super.

Für die Interessierten:
Code: [Select]
$table = array(
    array (
      table_id => test,
      table_class => test,
      table_summary => testing around,
      table_caption => töööö&st,
      table_head => array (
        array (
          row => array(
            array (cell => zelle1),
            array (cell => zelle1),
          ),
        ),
        array (
          row => array(
            array (cell => zelle3),
            array (cell => zelle4),
          ),
        ),
      )
    )
  );

Code: [Select]
<TMPL_LOOP name=table>
<table<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=table_border> border="<TMPL_VAR name=table_border>"</TMPL_IF><TMPL_IF name=table_spacing> cellspacing="<TMPL_VAR name=table_spacing>"</TMPL_IF><TMPL_IF name=table_padding> cellpadding="<TMPL_VAR name=table_padding>"</TMPL_IF><TMPL_IF name=table_summary> summary="<TMPL_VAR name=table_summary>"</TMPL_IF>>
<TMPL_IF name=table_caption>  <caption><TMPL_VAR name=table_caption></caption>
</TMPL_IF>
<TMPL_IF name=table_head>
  <thead>
<TMPL_LOOP name=table_head>
    <tr>
<TMPL_LOOP name=row>
      <td><TMPL_VAR name=cell></td>
</TMPL_LOOP>
    </tr>
</TMPL_LOOP>
  </thead>
</TMPL_IF>
<TMPL_IF name=table_foot>
  <tfoot>
    <tr>
      <td></td>
    </tr>
  </tfoot>
</TMPL_IF>
  <tbody>
    <tr>
      <td></td>
    </tr>
  </tbody>
</table>
</TMPL_LOOP>

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Loop - Tabelle erzeugen
Reply #2 on: Fri, 22. September 2006 - 12:30:05
FOREACH wird von Smarty unterstützt, kannst Du Dir ja mal ansehen. In vLIB wird es das sehr wahrscheinlich nie geben.

Gruß
Claus

Crash

  • Guest
Re: Loop - Tabelle erzeugen
Reply #3 on: Fri, 22. September 2006 - 14:01:18
Jetzt habe ich ein weiteres Problem. :-)

Noch einmal das ganze Template (welches ich ziemlich nützlich finde):
Code: [Select]
<TMPL_LOOP name=table>
<table<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=table_border> border="<TMPL_VAR name=table_border>"</TMPL_IF><TMPL_IF name=table_spacing> cellspacing="<TMPL_VAR name=table_spacing>"</TMPL_IF><TMPL_IF name=table_padding> cellpadding="<TMPL_VAR name=table_padding>"</TMPL_IF><TMPL_IF name=table_summary> summary="<TMPL_VAR name=table_summary>"</TMPL_IF>>
<TMPL_IF name=table_caption>  <caption><TMPL_VAR name=table_caption></caption>
</TMPL_IF>
<TMPL_IF name=table_head>
  <thead>
<TMPL_LOOP name=table_head>
    <tr>
<TMPL_LOOP name=row>
      <th<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=colspan> colspan="<TMPL_VAR name=colspan>"</TMPL_IF><TMPL_IF name=rowspan> rowspan="<TMPL_VAR name=rowspan>"</TMPL_IF><TMPL_IF name=abbr> abbr="<TMPL_VAR name=abbr>"</TMPL_IF>><TMPL_VAR name=cell></th>
</TMPL_LOOP>
    </tr>
</TMPL_LOOP>
  </thead>
</TMPL_IF>
<TMPL_IF name=table_foot>
  <tfoot>
<TMPL_LOOP name=table_foot>
    <tr>
<TMPL_LOOP name=row>
      <td<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=colspan> colspan="<TMPL_VAR name=colspan>"</TMPL_IF><TMPL_IF name=rowspan> rowspan="<TMPL_VAR name=rowspan>"</TMPL_IF><TMPL_IF name=abbr> abbr="<TMPL_VAR name=abbr>"</TMPL_IF>><TMPL_VAR name=cell></td>
</TMPL_LOOP>
    </tr>
</TMPL_LOOP>
  </tfoot>
</TMPL_IF>
<TMPL_LOOP name=table_data>
  <tbody>
<!-- <TMPL_VAR name=useeven> (definiert) -->
<TMPL_LOOP name=tbody>
<!-- <TMPL_VAR name=useeven> (nicht definiert) -->
    <tr<TMPL_IF name=useeven> class="<TMPL_IF name=__EVEN__>even<TMPL_ELSE>odd</TMPL_IF>"</TMPL_IF>>
<TMPL_LOOP name=row>
      <td<TMPL_IF name=table_id> id="<TMPL_VAR name=table_id>"</TMPL_IF><TMPL_IF name=table_class> class="<TMPL_VAR name=table_class>"</TMPL_IF><TMPL_IF name=colspan> colspan="<TMPL_VAR name=colspan>"</TMPL_IF><TMPL_IF name=rowspan> rowspan="<TMPL_VAR name=rowspan>"</TMPL_IF><TMPL_IF name=abbr> abbr="<TMPL_VAR name=abbr>"</TMPL_IF>><TMPL_VAR name=cell></td>
</TMPL_LOOP>
    </tr>
</TMPL_LOOP>
  </tbody>
</TMPL_LOOP>
</table>
</TMPL_LOOP>

Und zwar verliere ich die Variable useeven, haben Schleifen eine Art Scope?

Das Array sieht inzwischen so aus:
Code: [Select]
  $table = array(
    array (
      table_id => mitarbeiter,
      table_summary => Liste aller Mitarbeiter,
      table_caption => Liste aller Mitarbeiter,
      table_head => array (
        array (
          row => array(
            array (cell => Nr.),
            array (cell => Nachname),
            array (cell => Vorname),
            array (cell => Letzter Login)
          )
        )
      ),
      table_data => array (
        array (
          useeven => 1,
          tbody => array()
        )   
      )
    )
  );
Aus der Datenbank werden daten geholt und in tbody gepushed, darum wird das jetzt ausgeklammert.

Wie kann ich nun sicherstellen, dass ich die Variable der Schleife table_data auch noch in tbody habe?

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Loop - Tabelle erzeugen
Reply #4 on: Fri, 22. September 2006 - 17:58:58
Quote
Wie kann ich nun sicherstellen, dass ich die Variable der Schleife table_data auch noch in tbody habe?
Du benutzt den TMPL_LOOP einfach zweimal ...

Wenn Du weitere Fragen hast, dann bitte das Skript extern posten, wie es unter den Regeln beschrieben steht.

Gruß
Claus