Problem mit Template und schleife

ThorstenSt

Grünschnabel
halo, heute ist erst mein zweiter tag, wo ich mit templates arbeite, nur ich bekomme es einfach nicht hin, das mir vier tabellen neben einander und dann in die nächste zeile geht um dann wieder vier neben einander zu machen:
mein denkansatzt war so:

//anzeigen_show.php
PHP:
include('language.php'); //sprachpaket
include('index.html'); //hauptseite
include('kat_menue.php'); //menue
 
$show_tpl=new FastTemplate(".");
$show_tpl->define(array("ueberschrift_template" => "templates/ueberschrift.tpl",
"showoben_template" => "templates/showoben.tpl",
"showmitte_template" => "templates/showmitte.tpl",
"showunten_template" => "templates/showunten.tpl",
));
 
 
 
//rausholen des kategorie namens aus der db
 
function katname($id)
{
global $kategorie;
 
$sql_name="SELECT
kat_name
FROM
tab_kat
WHERE
id='".$id."'
";
 
$a_sql_name=mysql_query($sql_name);
$ausname=mysql_fetch_object($a_sql_name);
 
$kategorie=$ausname->kat_name; 
}
 
katname($katid);
//ende rausholen des kategorie namens aus der db
 
 
$show_tpl->assign("{UEBERSCHRIFT}",$kategorie);
$show_tpl->parse("ausgabe", "ueberschrift_template");
$show_tpl->FastPrint("ausgabe");
 
 
$sql_anzahl="SELECT
COUNT(id)
FROM
tab_anzeigen
WHERE
kat_id='".$katid."'
AND
freischalten='1'
";
 
 
$aussql_anzahl=mysql_query($sql_anzahl);
 
if(!($insgesamt=mysql_result($aussql_anzahl,0))==0)
 
{ 
 
/* Für's Blättern*/
 
$proseite=12;
$start=(isset($start)) ? abs((int)$start):0; 
$insgesamt=mysql_result($aussql_anzahl,0);
$start=($start >= $insgesamt) ? $insgesamt - $proseite : $start;
/*ende fürs blättern*/
 
 
if (mysql_errno()) die ("MySQL-Fehler: " . mysql_error());
 
$sql_anz="SELECT
id,name,strasse,plz,ort,tel,email,laufzeit,endet,titel,text,zeitstempel
FROM
tab_anzeigen
WHERE
kat_id='".$katid."
AND
freischalten='1'
ORDER BY 
zeitstempel
DESC
LIMIT
".$start.",".$proseite."
";
 
$aussql_anz=mysql_query($sql_anz);
 
while($aussql=mysql_fetch_array($aussql_anz,MYSQL_ASSOC))
{
$i=$i+1;
 
$text1=nl2br($aussql['text']);
$text=substr($text1,0,100);
$datum = date("d.m.Y",$aussql['zeitstempel']);
$endet = date("d.m.Y",$aussql['endet']);
 
if(file_exists("anzeigen_images/".$aussql['id'].".jpg"))
{
$image="anzeigen_images/".$aussql['id'].".jpg";
$width="46px";
$height="61px";
} 
else
{
$image="anzeigen_images/nopic.gif";
$width="1px";
$height="1px";
}
 
 
 
if($i=="1")
{
$show_tpl->assign("{SHOW_TR}","<tr>");
}
 
if($i=="4")
{
$show_tpl->assign("{SHOW_/TR}","</tr>");
$i=0;
}
 
$show_tpl->assign("{SHOW_START}",$datum);
$show_tpl->assign("{SHOW_TITEL}",$aussql['titel']);
$show_tpl->assign("{SHOW_IMAGE}",$image);
$show_tpl->assign("{SHOW_WIDTH}",$width);
$show_tpl->assign("{SHOW_HEIGHT}",$height);
$show_tpl->assign("{SHOW_TEXT}",$text);
$show_tpl->assign("{SHOW_ANID}",$aussql['id']);
$show_tpl->assign("{SHOW_ENDET}",$endet);
$show_tpl->parse("{SHOW_ANZEIGEN}", ".showmitte_template");
$show_tpl->parse("ausgabe2", "showmitte_template");
 
 
}
 
if($i>1)
{
$tr2="</tr>";
//$show_tpl->assign("{SHOW_/TR}",$tr2);
//$show_tpl->parse("ausgabe6", "showmitte_template");
}
 
$show_tpl->parse("ausgabe2", "showoben_template");
$show_tpl->FastPrint("ausgabe2");
 
//Blättern
 
echo"<tr><td colspan=\"4\"><center>";
if($start > 0)
{
$newStart = ($start - $proseite < 0) ? 0 : ($start-$proseite);
echo "<a class=\"weiter\" href=\"",$_SERVER['PHP_SELF'],"?start=",$newStart,"&katid=",$katid,"\"><font size=\"3pt\">&laquo;zur&uuml;ck</font></a>";
 
}
 
 
if($start + $proseite < $insgesamt)
{
$newStart = $start + $proseite;
echo " <a class=\"weiter\" href=\"",$_SERVER['PHP_SELF'],"?start=",$newStart,"&katid=",$katid,"\"><font size=\"3pt\">weiter&raquo;</font></a>";
}
 
 
$insgesamt2=$insgesamt/$proseite;
if(is_double($insgesamt2))
{
$insgesamtint=(int)$insgesamt2+1;
}
else
$insgesamtint=$insgesamt2;
 
 
if($insgesamtint==1)
{
$seite="Seite";
}
else
$seite="Seiten";
 
//echo "<br><br>Insgesamt ",$insgesamtint,"</b> ",$seite,"";
 
echo"";
 
}
else
{
echo"<br><center><b>In dieser Kategorie wurden noch keine Anzeigen aufgegeben!</b></center>";
}

//show_oben.tpl
HTML:
<table border="0" width="" align="left">
 
{SHOW_ANZEIGEN}

//show_mitte.tpl
HTML:
{SHOW_TR}
 
<td class="anzeigenrahmen" valign="top">
 
<table class="tabanzeigen" cellspacing="0" cellpadding="1" width=\"140\" height=\"160\">
 
<tr>
 
<td class="anzeigendat" colspan="2">Start:{SHOW_START}</td>
 
</tr>
 
<tr>
 
<td colspan="2" class="anzeigentitel"><b>{SHOW_TITEL}</b></td>
 
</tr>
 
<tr>
 
<td colspan="2" class="anzeigentext" valign="top"><img src="{SHOW_IMAGE}" align=\"left\" width="{SHOW_WIDTH}" height="{SHOW_HEIGHT}">{SHOW_TEXT} <br><a class="weiter" href="anzeigen_mehr.php?anid={SHOW_ANID}" target="_new">...mehr</a></td>
 
</tr>
 
<tr>
 
<td class="anzeigendat" colspan="2">Endet:{SHOW_ENDET}</td>
 
</tr>
 
</table>
 
</td>
 
{SHOW_/TR}

//show_unten.tpl
HTML:
</center></td></tr></table>

so, soviel zum code.

nur wenn ich das so mache, das er nur bei i==1 ein <tr> setzt und bei i==4 ein </tr>, macht er überall eine <Tr></tr> hin, so das die ganzen anzeigen untereinander stehen und nicht nebeneinander stehen.
Es kann wahrscheinlich auch mal wieder nur ein denkfehler oder logik fehler von mir sein. Ich weis einach nicht mehr weiter. Wer mir helfen kann, dem bin ich sehr dankbar.

Gruß
Thorsten
 
Puh, das ist ein ziemliches Durcheinander ;)

Kannst du mal bitte von der Ausgabe dein html posten ? (Anhang als *.txt)

Dann geht die Fehlersuche etwas schneller ;)
 
sitze jetzt in der schule,. du meinst bestimmt den quellcode, der dann ausgegeben wird, wenn die datei ausgeführt wird. habe mal eine txt angehangen, wie es aussieht und wie es sein sollte ! danke schonmal

die {...} sind mit daten gefüllt, das klaPPT:
 

Anhänge

Zuletzt bearbeitet:
Ja, da ist der Quellcode gemeint. Ich kann aber keine Fehler suchen, wenn du mir nur nen Schnipsel reinpostest.

Momentan sieht das für mich so aus, dass du die "Haupttabelle" (also <table> und </table> fehlt im Schnipsel) vergessen hast, und zu viele <tr> und </tr> machst was also dafür spricht, SHOW_TR und SHOW_/TR zu leeren, wenn sie nicht benötigt sind:

PHP:
if($i=="1")
  {
    $show_tpl->assign("{SHOW_TR}","<tr>");
  }
else
  {
    $show_tpl->assign("{SHOW_TR}","");
  }

if($i=="4")
  {
    $show_tpl->assign("{SHOW_/TR}","</tr>");
    $i=0;
  }
else
  {
    $show_tpl->assign("{SHOW_/TR}","");
  }


PS: Warum müssen die Leute immer so komplizierte Template-Techniken machen?

ein einfaches $mainhtml .= "<table> ... </table>"; tuts doch auch

In das Template kommt einfach noch an die passenden Stelle ein $mainhtml rein und das wars dann schon.
 
Um gleich mal das nächste Problem zu beheben:

PHP:
if($i>1)
{
$tr2="</tr>";
//$show_tpl->assign("{SHOW_/TR}",$tr2);
//$show_tpl->parse("ausgabe6", "showmitte_template");
}


so geht das net ;)

du musst noch rausbekommen wieviele blanko-zellen er machen muss:

PHP:
if($i>0) // wird ja auf 0 gesetzt, wenns das letzte war
{
  while ($i < 4)
    {
       // hier schicken wir ein "<td>&nbsp;</td>" ans Template
      $i++;
    }
  $show_tpl->assign("{SHOW_/TR}","</tr>");
}
Und was ich dir noch unbedingt raten würde:
Schreib nicht 4 rein, sondern nimm jeweils eine Variable dafür, der du am Anfang einfach den Wert 4 gibst. wenn du dann doch 5 Spalten haben willst musst du nur den Wert ändern und nicht dein Script nach allen 4ern durchsuchen.
 
Zurück