phpbar.de logo

Mailinglisten-Archive

[php] phplib: verschachtelte Templates

[php] phplib: verschachtelte Templates

Heiko Schubert heiko.schubert_(at)_bnbt.de
Sat, 02 Sep 2000 16:11:11 GMT


Hallo Mitleser,

zugegen, das Prinzip der Templates habe ich (leider) immer noch nicht 
ganz verstanden, aber daher beschäftige ich mich jetzt damit. Ich 
versuche mich an einer Art Veranstaltungs-Kalender, welcher wie folgt 
aufgebaut ist:


| ----- main -----|
|                 |
||-- semester -- ||
||               ||
|| |-- monat -- |||
|| |------------|||
||               ||
||---------------||
|                 |
|-----------------|

Hier, dachte ich mir, bietet sich die Verwendung von Templates geradezu 
an. Es gibt also drei Dateien:

* show_data.ihtml: die Hauptdatei sozusagen
{OUT} 

* show_semester.ihtml: Sommersemester 2000, Wintersemester 2000/2001, ...
<!-- BEGIN SEMESTER_ROW -->
{SEMESTER_TYP}
{OUT_MONTH}
<!-- END SEMESTER_ROW -->

* show_month.ihtml: die einzelnen Monate mit Ihren Terminen
<!-- BEGIN MONTH_ROW -->
{SEMESTER_MONTH}
<!-- END MONTH_ROW  -->

(stark gekürzt)


Die Daten kommen aus einer MySQL-Datenbank.

Die einzelnen Semester darzustellen war kein Problem:

$t->set_file("output_main"       ,"show_data.ihtml");
$t->set_file("output_semester"   ,"show_semester.ihtml");

$t->set_block("output_semester"  ,"SEMESTER_ROW","SEMESTER_ROWS");

... (die Semester aus der Datenbank holen) 
while ($q->next_record()) {
	$t->set_var("SEMESTER_TYP", $q->f("semester_month");
	$t->parse("SEMESTER_ROWS","SEMESTER_ROW",true);
}
...

$t->parse("OUT","output_semester");
$t->parse("OUT","output_main");
$t->p("OUT");

Dabei muß ich zugeben, daß ich das auch nur durch testen hinbekommen 
habe. Speziell verstehe ich nicht:

$t->set_block("output_semester"  ,"SEMESTER_ROW","SEMESTER_ROWS");
und
$t->parse("SEMESTER_ROWS","SEMESTER_ROW",true);

Na ja, weiter im Text. Meine Überlegung war nun, folgende:
$t->set_file("output_month"      ,"show_month.ihtml");
$t->set_block("output_month"     ,"MONTH_ROW"   ,"MONTH_ROWS");

... im "Kopf" einfügen und die while-Schleife dahingehend modifizieren, 
daß in der while-Schleife eine weitere while-Schleife ausgeführt wird, 
die die Monats-Daten "holt":

...
while ($q->next_record()) {

   $semester_typ  = $q->f("semester_typ");
   $t->set_var("SEMESTER_TYP",$semester_typ);
   $qquery = "SELECT * FROM semester WHERE semester_typ='$semester_typ' 
";
   $qq->query($qquery);
   if ($qq->num_rows()>0) {
      while ($qq->next_record()) {
         $semester_month   = $qq->f("semester_month");
         $t->set_var("SEMESTER_MONTH",$semester_month);
         $t->parse("MONTH_ROWS","MONTH_ROW", true);

      } // end of while
   }

   $t->parse("SEMESTER_ROWS","SEMESTER_ROW", true);

} // end of while

... dann noch ein 

$t->parse("OUT","output_month");

vor den anderen $t->parse(...) und fertig. Aber so klappt's nicht. :-( 
Die Monate nicht angezeigt. Ein "print ..." in der while-Schleife zeigte 
mir aber, daß die Daten richtig aus der Datenbank gelesen werden.

Kann mir jemand einen Tip geben, wie man die Sache "richtig" angeht?

Danke schon einmal!

Bye,
	Heiko











php::bar PHP Wiki   -   Listenarchive