Hurra, es klappt!!!
Ich habe beide Vorschläge vereint. Jetzt tut es genau das, was es soll.
Wenn der nachfolgende Quellcode "sauber" ist, kann ich es als fertiges Modul hochladen, damit auch die Anderen etwas davon haben.
Der Kürze halber nur der Output und nachfolgend die Templates:
Code: Alles auswählen
<!--start modul-->
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Navigation 1.1
* Author : Jan Lengowski
* Copyright : Contenido - four for business
* Created : 15-05-2003
* Modified : 26-05-2003
************************************************/
if ( !is_object($db2) ) {
$db2 = new DB_Contenido;
}
/**
* Check if a category is child
* of another category
*
* @return boolean true/false
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG 2003
*/
function catIsChildOf($id, $idparent) {
global $cfg, $client, $lang;
$db = new DB_Contenido;
$parent = $id;
while ( $parent != 0 ) {
$sql = "SELECT
a.parentid
FROM
".$cfg["tab"]["cat"]." AS a,
".$cfg["tab"]["cat_lang"]." AS b
WHERE
a.idclient = '".$client."' AND
b.idlang = '".$lang."' AND
a.idcat = b.idcat AND
a.idcat = '".$parent."'";
$db->query($sql);
$db->next_record();
$parent = $db->f("parentid");
if ($parent == $idparent) {
return true;
}
}
return false;
}
if ( catIsChildOf($idcat, CMS_VALUE[0]) ) {
$sel_idcat = $idcat;
} else {
$sel_idcat = CMS_VALUE[0];
}
/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');
/**
* Array storing alle the
* navigation data
*/
$navitems = array();
/* Template Instance */
$tpl = new Template;
/**
* Recursive function for creating
* the navigation array
* @param Int $idcat Category id
*/
function nav($idcat) {
global $navitems, $client, $lang, $cfg;
$db = new DB_Contenido;
$db2 = new DB_Contenido;
$sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'";
$db->query($sql);
$db->next_record();
$parentid = $db->f("parentid");
if ( $parentid == 0 ) {
if ( $idcat != CMS_VALUE[0] ){
$navitems = array();
$sql = "SELECT
A.idcat,
C.name
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = 'CMS_VALUE[0]'
ORDER
BY A.idtree";
$db->query($sql);
while ($db->next_record()) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
b.is_start = '1' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$db2->next_record();
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"target" => $target);
}
}
return true;
}
$sql = "SELECT
A.idcat,
C.name
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '$parentid'
ORDER BY
A.idtree";
$db->query($sql);
while ($db->next_record()) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
b.is_start = '1' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$db2->next_record();
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$tmp_nav[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"target" => $target);
}
$tmp_nav[$idcat]["sub"] = $navitems;
$navitems = $tmp_nav;
/* Function call */
nav($parentid);
} // end function
$sql = "SELECT
A.idcat,
C.name
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '$sel_idcat'
ORDER BY
A.idtree";
$db->query($sql);
while ( $db->next_record() ) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
b.is_start = '1' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$db2->next_record();
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"target" => $target);
}
/* Create Navigation Array */
nav($sel_idcat);
/* Start Output buffer */
/************************************************************/
echo '<div id="navcontainer-left">
<ol id="navlist-left">';/*liste erste ebene***********************************/
foreach ($navitems as $key => $data) {
/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', nl2br($data['name']));
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('?idcat='.$data['idcat']));
$tpl->next();
echo '<li class="navfirst-left">';/*anfang listenpunkte erste ebene***********************/
if ($idcat == $data['idcat']) { // template für aktiven menüpunkt
$tpl->generate('templates/navfirst_active.html');
} elseif ( is_array($data['sub']) ) { // template für geöffnete kategorien
$tpl->generate('templates/navfirst_on.html');
} else { // template für geschlossene nicht aktive kategorie
$tpl->generate('templates/navfirst_off.html');
}
if (count($data['sub'])>=1) {
echo '<ol class="subnavlist-left">';/*anfang liste zweite ebene****************************/
foreach ($data['sub'] as $key => $data) {
/* 2. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', nl2br($data['name']));
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('?idcat='.$data['idcat']));
$tpl->next();
echo '<li class="navsecond-left">';/*anfang listenpunkte zweite ebene**********************/
if ($idcat == $data['idcat']) { // template für aktiven menüpunkt
$tpl->generate('templates/navsecond_active.html');
} elseif ( is_array($data['sub']) ) { // template für geöffnete kategorien
$tpl->generate('templates/navsecond_on.html');
} else { // template für geschlossene nicht aktive kategorie
$tpl->generate('templates/navsecond_off.html');
}
if (count($data['sub'])>=1) {
echo '<ol class="subnavlist-left">';/*anfang liste dritte ebene*****************************/
foreach ($data['sub'] as $key => $data) {
/* 3. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', nl2br($data['name']));
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('?idcat='.$data['idcat']));
$tpl->next();
echo '<li class="navthird-left">';/*anfang listenpunkte dritte ebene***********************/
if ($idcat == $data['idcat']) { // template für aktiven menüpunkt
$tpl->generate('templates/navthird_active.html');
} elseif ( is_array($data['sub']) ) { // template für geöffnete kategorien
$tpl->generate('templates/navthird_on.html');
} else { // template für geschlossene nicht aktive kategorie
$tpl->generate('templates/navthird_off.html');
}
echo '</li>';/*ende listenpunkte dritte ebene************************/
} // end foreach
echo '</ol>';/*ende liste dritte ebene******************************/
} // end if
echo '</li>';/*ende listenpunkte zweite ebene***********************/
} // end foreach
echo '</ol>';/*ende liste zweite ebene*****************************/
} // end if
echo '</li>';/*ende listenpunkte erste ebene************************/
} // end foreach
echo '</ol>';/*ende liste erste ebene*******************************************************/
/***********************************************************/
echo '</div>';
/* Output buffer-contents */
echo $html;
?>
<!--end Modul-->
navfirst_off.html:
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="current-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="current-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="current-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Code: Alles auswählen
<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
http://www.dilight.com
Danke an Euch beiden,
Grüße,
Karin.