Navigationsliste als sortierte oder unsortierte Liste

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Fr 14. Mai 2004, 19:05

Wie versprochen, hier die Rückmeldung:

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-->
Die Templates:

navfirst_off.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="current-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navfirst_on.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="current-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navfirst_active.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="current-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navsecond_off.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navsecond_on.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navsecond_active.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navthird_off.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-off" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navthird_on.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-on" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
navthird_active.html:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a class="subcurrent-left-active" target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Die Einsatz des Modules ist zu sehen unter:
http://www.dilight.com


Danke an Euch beiden,

Grüße,
Karin.

alkibiades
Beiträge: 3
Registriert: So 11. Jan 2004, 18:13
Kontaktdaten:

Ausgabe aller Kategorien als UL möglich?

Beitrag von alkibiades » Mi 26. Mai 2004, 16:24

wolfganggarella hat geschrieben:
ersetz' 'mal im Modul der Hauptnavi Alles zwischen start output buffer und read out buffer durch Folgendes...
Hallo Wolfgang,
ich bin auf auch der Suche nach einer Lösung für die Ausgabe der kompletten Navigationsstruktur (bzw. aller Kategorien) als ungeordnete Liste. Wie ließe sich das mit dem von dir angepaßten Hauptnavigationsmodul erreichen? Gegenwärtig produziert das Modul nämlich immer nur eine Liste mit den Subkategorien der aktuellen Kategorie.

Hintergrund ist: ich möchte ein horizontales Dropdown-Menü nur mittels CSS erzeugen.

unformatiertes Beispiel (soweit ich es realisieren konnte) ist unter

http://www.copernicus-stipendium.de/cms ... hp?idcat=3

zu finden.

Ein weiteres Problem ist, dass auf der allerobersten Navigationsebene (z.B. Hauptnavigation) keine Liste mit Unterlisten produziert wird und ergo auch kein Dropdown-Menü erzeugt werden kann (vgl. http://www.copernicus-stipendium.de/cms ... ontent.php

Ich wäre für jede Hilfe überaus dankbar :!:

Gruß,
Alkibiades

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Mi 26. Mai 2004, 16:44

Hallo alkibiades,

ich hatte ja eigentlich noch auf eine "Freigabe" des Codes gewartet ;-)

Also, beí mir funktioniert die Navigation als sortierte Liste mit dem oben angegebenen Output und dem Input des Navigationsmodules.

Ich habe aber bei mir noch weitere CSS-Formatierungen drin.
Die brauchst Du ja nur reinzusetzen.

Wenn Du mein ganzes Modul brauchst, incl. css, sag Bescheid.

Anzusehen ist die Navigation unter http://www.dilight.com/front_content.php
allerdings senkrecht, aber Versuche haben schon gezeigt, das sie auch waagerecht formatierbar wäre. (Das "css-indengriff-kriegen" vorausgesetzt ;-))) )

Und: Die Site ist noch nicht offiziell ;-))

Grüße,
Karin.

wolfganggarella
Beiträge: 74
Registriert: Fr 7. Nov 2003, 11:35
Wohnort: München
Kontaktdaten:

Beitrag von wolfganggarella » Do 27. Mai 2004, 09:48

Hi Karin, Alkibiades,

ich sehe das so: Das Standardmodul Hauptnavigation sucht nach einer "Eltern-Kind-Beziehung" zwischen den Kategorien (die parentid in der con_cat) und demzufolge zeigt es nur die Unterkategorien (Kinder) der aktiven Hauptkategorie (Eltern).
Lösung: Alle Kategorien und Unterkategorien durchlaufen; gnadenlos ohne Rücksicht auf Verluste, zum Beispiel mit folgendem, kompletten Output:

Code: Alles auswählen

<?php 
/************* hauptnavi baum liste *********/
$db_result_erste=mysql_query("
SELECT * FROM 
con_cat_tree as a,
con_cat as b,
con_cat_lang as c
WHERE 
b.parentid=1 AND
b.idcat=a.idcat AND
a.idcat=c.idcat AND
c.idlang=$lang AND
visible=1");
echo '<ul class="navig">';
while($db_row_erste=mysql_fetch_array($db_result_erste)){$parent1=$db_row_erste['idcat'];

if($idcat==$db_row_erste['idcat']){
echo '<li>'.$db_row_erste['name'];
}else{
echo '<li><a href="index.php?idcat='.$db_row_erste['idcat'].'">'.$db_row_erste['name'].'</a>';
}

$db_result_zweite=mysql_query("
SELECT * FROM
con_cat_tree as a,
con_cat as b,
con_cat_lang as c
WHERE
b.parentid=$parent1 AND
b.idcat=a.idcat AND
a.idcat=c.idcat AND
c.idlang=$lang AND
visible=1
ORDER BY
c.name");
echo '<ul class="navig2">';
while($db_row_zweite=mysql_fetch_array($db_result_zweite)){$parent2=$db_row_zweite['idcat'];

if($idcat==$db_row_zweite['idcat']){
echo '<li>'.$db_row_zweite['name'];
}else{
echo '<li><a href="index.php?idcat='.$db_row_zweite['idcat'].'">'.$db_row_zweite['name'].'</a>';
}


$db_result_dritte=mysql_query("
SELECT * FROM
con_cat_tree as a,
con_cat as b,
con_cat_lang as c
WHERE
b.parentid=$parent2 AND
b.idcat=a.idcat AND
a.idcat=c.idcat AND
c.idlang=$lang AND
visible=1");
echo '<ul class="navig3">';
while($db_row_dritte=mysql_fetch_array($db_result_dritte)){

if($idcat==$db_row_dritte['idcat']){
echo '<li>'.$db_row_dritte['name'];
}else{
echo '<li><a href="index.php?idcat='.$db_row_dritte['idcat'].'">'.$db_row_dritte['name'].'</a>';
}

echo '</li>';
} // end dritte
echo '</ul>';
echo '</li>';
} // end zweite
echo '</ul>';
echo '</li>';
} //end erste
echo '</ul>';
?>
Mit der hover-Konstruktion von Alkibiades sollte es nun möglich sein, die komplette Navi mit Drop-Down-Menüs zu zeigen. (Hab's allerdings nicht ausprobiert)
Das ist allerdings erst die "halbe Miete", denn bei Aufruf des neuen Artikels klappt alles wieder ein. Da muss noch ggfs. mit einem weiteren Modul und/oder CSS Eigenschaften experimentiert werden...
Aber: Der Weg ist das Ziel... ?

Grüße
Wolfgang

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Fr 28. Mai 2004, 19:01

Hallo Wolfgang,
also, wenn ich Dein Posting richtig gelesen habe, ist Dein Code der komlpetteOutput des Navigationsmodules.

Ich habe ihn gerade mal getestet:
(Input vom normalen Haupt-Navigationsmodul)

Leider sehe ich bei eingeschalteter Fehlermeldung statt der Navigation nur Folgendes:

Code: Alles auswählen

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\xampp\htdocs\www.vita.virtualwork\front_content.php(563) : eval()'d code on line 58
Wenn kein Subnavigationspunkt in der Kategorie ist, kommt keine Fehlermeldung.

Grüße,
Karin.

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Sa 29. Mai 2004, 10:04

Ich habe mit der Navigations-Liste ein Phänomen, das ich mir nicht erklären kann:

Der von mir oben veröffentlichte Quelltext funktioniert bei mir auf allen Testumgebungen so sehr gut.
Jetzt habe ich die Site mal in meinem alten PDA mit Windows CE 2.11 aufgerufen:
Egal, welchen Navigationspunkt ich anklicke, ich lande immer wieder auf der Startseite.
Baue ich das normale Hauptnavigationsmodul ein, funktieoniert die Navigation.
Liegt das jetzt an Windows CE 2.11? Und wenn ja, warum?
Kann mir jemand dazu etwas sagen?

Grüße,
Karin.

Hagbard
Beiträge: 66
Registriert: Sa 18. Okt 2003, 23:52
Kontaktdaten:

Beitrag von Hagbard » Fr 23. Jul 2004, 11:03

Ich komme nicht weiter... :)

Ich habe das Output von Karin Dähne eingebunden und meine CSS-Stiles angepasst. Das Menü sieht gut aus. Alle Hauptpunkte werden geladen. Nur leider stellt er bei mir keine Unterpunkte da.

Die Unterpunkte sind richtig eingerichtet. Im "Service-Navigations-Modul" funktioniert alles einwandfrei. Nur in dem hier geposteten Modul zeigt er sie mir nicht an.

Mein Output sieht genauso aus, wie das oben genannte und das Input ist gleich dem normalen Hauptnavigations-Modul von Con 4.4

Auch habe ich alle HTML-Templates identisch den oben genannten angelegt und die Stiles angepasst.

Ideen?! Braucht ihr noch zusätzliche Infos?

Danke schonmal.

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Fr 23. Jul 2004, 19:21

Hallo Hagbard ,

hier noch einmal das komplette Modul, welches ich zur Zeit einsetze:

Input:

Code: Alles auswählen

/**
 * Navigation
 *
 * INPUT
 *
 * @autor Jan Lengowski <Jan.Lengowski@4fb.de>
 * @copyright four for business AG 2003
 */

?>
<table cellspacing="0" cellpadding="0" cellpadding="4">

    <tr>
        <td class="text">Baum wählen:</td>
        <td>
            <select name="CMS_VAR[0]">
            <option value="0">-- kein --</option>
            <?php

                $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
                            C.idlang    = '".$lang."' AND
                            B.idclient  = '".$client."' AND
                            C.visible   = 1 AND
                            A.level     = '0'
                        ORDER BY
                            A.idtree";

                $db->query($sql);

                while ( $db->next_record() ) {

                    if ( "CMS_VALUE[0]" == $db->f("idcat") ) {
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>';

                    } else {
                        echo '<option value="'.$db->f("idcat").'">'.$db->f("name").'</option>';

                    }
                }

            ?>
            </select>
        </td>
    </tr>

</table>

<?php
Output:

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-->
Hoffe, Du kommst jetzt weiter...

Grüße,
Karin.

Hagbard
Beiträge: 66
Registriert: Sa 18. Okt 2003, 23:52
Kontaktdaten:

Beitrag von Hagbard » Fr 23. Jul 2004, 21:38

Hm, irgendwas mach ich falsch :oops:

Bin auch nicht so der Held im Code.

Also, das Hauptmenü wird einwandfrei angezeigt. Aber wenn ich auf eine Kategorie mit Unterkategorien klicke, offnet sich zwar die entsprechende Seite, aber es taucht keine 2. Nav-Ebene auf.

Ich habe 6 Hauptpunkte und 2 von denen haben jeweils 2 Unterkategorien. Alle Kategorien sind "online" und haben einen Artikel, der als online/startartikel definiert ist. Auch habe ich die navfirst_aktiv etc. HTML-Daten angelegt. Exat wie die oben genannten. Ich kapiers nicht.

<sich die Haare rauft>

Kann ich bei den CSS was falsch machen, daß keine Unterpunkte angezeigt werden? Entschuldige meine unwissenden Fragen ;) Wenn ich etwas zur Problemlösung beitragen kann, sag bescheid (Screenshots von xy, etc.)

Ich danke Dir herzlich für Deine Hilfe.

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne » Fr 23. Jul 2004, 21:45

Hallo Hagbard ,

gib mal die URL, wo ich reinsehen kann.
Wenn Du es vorerst noch lokal hast: einpacken und an meine Emailadresse (steht im Profil) senden.
(Datenbankdump nicht vergessen ;-) )

Grüße,
Karin.

Gesperrt