php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
parser-problem


 
darkone
02-06-2003, 03:09 
 
Hallo Leute
Ich hab da ein kleines aber kliffliges Problem.
Da ich erst seit kurzem mit klassen und parsern arbeite, übersteigt die Lösung wohl meine Fähigkeiten.
Ich Haabe mein Forum auf templates umgestellt, aber nun wird die reihenfolge durcheinandergewirbelt.
Erst wird die 2te schleife ausgegeben, dann die 1te, dann der voranstehende code.
Für die Schleifen verwende ich extra-html-dateien.
Das Problem liegt in der Reihenfolge der ausgabe der einzelnen template-objekte.
Irgendwie müßte ich glaubich ein großes objekt mit unterobjekten erstellen, welches ich dann in einem ausgeben kann, das kann ich aber echt nicht.
Weiß jemand wies geht,
oder einen besseren Weg?

Hier der code:
die "grund-datei":


$tpl = new tpl("inc/tpl/inhalt.htm");
$replace = array(
"row1" => categories()
);

$tpl->assign($replace);
$tpl->out();
Die functions.php:
function categories ()
{
global $SQLuser,$SQLpasswort,$SQLserver,$SQLdatabase,$db,$category,$cat,$lastlogin;
if (isset($category))
{$sql="SELECT * FROM fcats WHERE name='$category'";};
if (!isset($category))
{$sql="SELECT * FROM fcats ORDER BY id";};
$res=new SQLQuery($sql);

while ($fcats = $res->fetch())
{
$cat=$fcats->name;
$res2=new tpl("inc/tpl/row1.htm");
$replace = array(
"category" => $fcats->name,
"inhalt" => inhalt()
);
$res2->assign($replace);
$res2->out();
}
};

function inhalt()
{
global $cat;
if (!isset($lastlogin)) {$lastlogin="0";};
$cnt="1";
$sql="SELECT * FROM finhalt WHERE category='$cat' ORDER BY id";
$res=new SQLQuery($sql);
while ($finhalt = $res->fetch())
{
$res3=new tpl("inc/tpl/row2.htm");
$replace = array(
"newposts" => newposts(),
"inhalt-link" => $finhalt->link,
"inhalt-text" => $finhalt->text,
"inhalt-lpl" => $finhalt->lpl,
"inhalt-lpn" => $finhalt->lpn,
"inhalt-lpdt" => $finhalt->lpdt,
"inhalt-themen" => $finhalt->themen,
"inhalt-beitraege" => $finhalt->beitraege
);
$res3->assign($replace);
//$res3->out();
$res3->out();
// echo $out;
}

};
die classes.php:
class tpl {
var $template_file;
var $replace_array;
var $delimiterStart = "{";
var $delimiterEnd = "}";

function setStartDelim($delim="{")
{
$this->delimiterStart = $delim;
}
function setEndDelim($delim="}")
{
$this->delimiterEnd = $delim;
}
function tpl($template_file)
{
if(file_exists("inc/tpl/inhalt.htm"))
{
$this->template_file = implode("", file($template_file));
return $this->template_file;
}
else
{
$this->template_file = "";
die("failed to load template file");
}
}
function assign($searchString,$key=false)
{
if(is_array($searchString))
{
foreach($searchString as $var => $key)
{
$search = $this->delimiterStart.$var.$this->delimiterEnd;
$replace = $key;
$this->template_file = str_replace($search,$replace,$this->template_file);
}
}
else
{
$search = $this->delimiterStart.$searchString.$this->delimiterEnd;
$replace = $key;
$this->template_file = str_replace($search,$replace,$this->template_file);
}
return $this->template_file;
}
function get()
{
return $this->template_file;
}
function out()
{
echo($this->get());
}
};

row1.htm:
<TR>
<TD class="category" colSpan="6"><A href="forum.php?category={category}">
{category} </A>
</TD>
</TR>

{inhalt}
inhalt.htm:
<TABLE summary="inhalt1" align="center" border="0" cellPadding="0" cellSpacing="0" width="97%" style="BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; MARGIN-BOTTOM: 0px">
<TBODY>
<TR>
<TD class="tableback">
<TABLE summary="inhalt11" border="0" cellPadding="6" cellSpacing="1" width="100%">
<TBODY>
<TR>
<TD colspan="2" class="header"
width="62%">Forum:</TD>
<TD class="header"
width="6%">Themen:</TD>
<TD class="header"
width="6%">Beitr&auml;ge:</TD>
<TD class="header"
width="19%">Letztes Posting:</TD></TR>
{row1}


</TBODY></table>
</TD></TR></TBODY></TABLE>
row2.htm:
<TR>
<TD align='center' class='tablerow'>
{newposts}
</TD>
<TD class='tablerow' onMouseOver="this.className='tablerowhl'" onMouseOut="this.className='tablerow'">
<FONT class='12px'>
{inhalt-link}
</FONT>&nbsp; <BR>
{inhalt-text}
</TD>
<TD align='center' class='tablerow'>{inhalt-themen} </TD>
<TD align='center' class='tablerow'>{inhalt-beitraege} </TD>
<TD class='tablerow'>
<TABLE width='100%'>
<TBODY>
<TR>
<TD align='center'><FONT face='verdana' size='1'>

{inhalt-lpdt}
<br>by&nbsp;
{inhalt-lpn}
</FONT></TD>
<TD align='right'>
<A href="{inhalt-lpl}"><IMG border='0' src='images/symbols/lastpost.gif' alt='Letzter Post'></A>
</TD></TR></TBODY></TABLE>
</TD>
</TR>

 
TBT
02-06-2003, 09:14 
 
du machst nach dem generieren von zB row1 ein

$res2->out();

damit gibst du es an den Browser aus.
Du mußt aber dort ein

$ergebniss=$res2->get();

machen, und das $ergebniss als {row1} an das Template "inhalt" geben

 
CrazyPip
02-06-2003, 16:26 
 
Hi @all,

wo wir grad dabei sind, hab ich auch mal eine Frage (nicht direkt zu dem oben beschriebenen Problem):

was ist das für eine Schreibweise {row1} oder {inhalt} oder ähnliches? ich sehe diese schreibweise recht häufig, weiss aber nicht was das bedeuten soll oder wie ich damit umgehen kann.

Wo bekomme ich Infos über dieses Thema her?

cya CrazyPip

 
darkone
02-06-2003, 20:08 
 
yo, danke TBT, auf genau so ne antwort hab ich gehofft, werds gleich ausprobiern.
@PiP:
Das ist die schreibweise für template-dateien, normale html-dateien mit {Platzhaltern}, in die von einem PHP-Programm code oder variablen eingesetzt werden.
Dadurch kannst du die template-dateien von jemand anderes bearbeiten lassen, der kein PHP kann, während du noch am dazugehörigen code sitzt.

 
CrazyPip
03-06-2003, 17:18 
 
Hi,

was meinst du mit "php-programm"? meinst du damit einen apache? gibts da einen Link den du zu dem Thema empfehlen kannst?

cya CrazyPip1


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:04 Uhr.