Was macht die Zeile - speziell das "generate"? Ist das eine Prozedur?:
In diesen Zeilen werden die im Frontend liegenden Templates für die Navigation ausgelesen, die vorhanden Container in den Templates gefüllt und dann angezeigt. Dies geschieht in einer Schleife, so das jedes Template einen Menüpunkt darstellt.
Zum besseren Verständnis hier der Ausgabeteil der Hauptnavi
Code: Alles auswählen
/* Start Output buffer */
ob_start();
?>
<table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="21" width="22" class="boxsign"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td>
<td width="130" class="boxtitle">Navigation</td></tr>
<tr><td align="center" colspan="2" class="boxcontent">
<?PHP
echo '<table border="0" cellspacing="0" cellpadding="0">';
foreach ($navitems as $key => $data) {
/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if ($idcat == $data['idcat'] || is_array($data['sub'])) {
$tpl->generate('templates/navfirst_on.html');
} else {
$tpl->generate('templates/navfirst_off.html');
}
if (is_array($data['sub'])) {
foreach ($data['sub'] as $key => $data) {
/* 2. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if ($idcat == $data['idcat'] || is_array($data['sub'])) {
$tpl->generate('templates/navsecond_on.html');
} else {
$tpl->generate('templates/navsecond_off.html');
}
if (is_array($data['sub'])) {
foreach ($data['sub'] as $key => $data) {
/* 3. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navthird_on.html');
} else {
$tpl->generate('templates/navthird_off.html');
}
} // end foreach
} // end if
} // end foreach
} // end if
} // end foreach
echo '</table>';
echo '</td></tr></table>';
/* Read out buffer */
$html = ob_get_contents();
/* Clean buffer */
ob_end_clean();
/* Output buffer-contents */
echo $html;
Und jetzt im Detail
Ein Ausgabepuffer wird initialisiert, in den nun alle weiteren Daten erst mal geschrieben werden.
Code: Alles auswählen
<table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="21" width="22" class="boxsign"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td>
<td width="130" class="boxtitle">Navigation</td></tr>
<tr><td align="center" colspan="2" class="boxcontent">
Die Tabelle für die Navigationsbox wird geöffnet und der Boxheader wird mit dem Standardpfeilgif und Titel der Box erstellt.
Code: Alles auswählen
<?PHP
echo '<table border="0" cellspacing="0" cellpadding="0">';
Die innere Tabelle für die Navpunkte wird geöffnet.
Code: Alles auswählen
foreach ($navitems as $key => $data) {
/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
Es wird eine Schleife gestarte, die das erstellte array $navitems ausliest.
Mit der Klasse $tpl werden nun für diesen Menüpunkt die Variablen (NAME, TARGET, HREF), die so auch als Container im Template stehen, mit den entsprechenden Werten gefüllt.
Code: Alles auswählen
if ($idcat == $data['idcat'] || is_array($data['sub'])) {
$tpl->generate('templates/navfirst_on.html');
} else {
$tpl->generate('templates/navfirst_off.html');
}
Abhängig davon ob der Menüpunkt aktiv ist oder nicht ($idcat == $data['idcat']), oder es eine weitere Navebene gibt (is_array($data['sub'])), werden entweder in dem Template navfirst_on.html oder navfirst_off.html die entsprechenden Container mit den vorher erstellten Klassenvariablen gefüllt.
Code: Alles auswählen
if (is_array($data['sub'])) {
foreach ($data['sub'] as $key => $data) {
/* 2. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if ($idcat == $data['idcat'] || is_array($data['sub'])) {
$tpl->generate('templates/navsecond_on.html');
} else {
$tpl->generate('templates/navsecond_off.html');
}
if (is_array($data['sub'])) {
foreach ($data['sub'] as $key => $data) {
/* 3. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navthird_on.html');
} else {
$tpl->generate('templates/navthird_off.html');
}
Hier wird genau dasselbe für 2 weiter Navigationsebenen gemacht, wobei die Information darüber aus dem array $data['sub'] genommen werden.
Code: Alles auswählen
} // end foreach
} // end if
} // end foreach
} // end if
} // end foreach
echo '</table>';
echo '</td></tr></table>';
/* Read out buffer */
$html = ob_get_contents();
Jetzt werden alle geöffneten Schleifen, dann zuerst die innere Tabelle, dann die äußere, geschlossen und die so erstellten Daten ( am Anfang mit ob_start() ) in die Variable $html geschrieben.
Code: Alles auswählen
/* Clean buffer */
ob_end_clean();
/* Output buffer-contents */
echo $html;
?>
Zum Abschluß wird der Puffer gelöscht und das Menü in $html ausgegeben.
Gruß aus Franken
Ortwin