Hauptnavigation (bis 4st, css) mit 1-4 fixen Ebenen

chrism
Beiträge: 14
Registriert: Mo 30. Jun 2003, 09:34
Wohnort: Wien
Kontaktdaten:

Hauptnavigation (bis 4st, css) mit 1-4 fixen Ebenen

Beitrag von chrism » Mo 11. Apr 2005, 07:46

Hallo,

biete mal als meinen Beitrag eine überarbeitete und erweiterte 4-stufige Hauptnavigation mit CSS-Formatierung an, bei der man 1 bis 4 Ebenen fest anzeigen lassen kann, den Rest dynamisch wie gewohnt.

Input und Output sind unter dem folgenden Link downloadbar:

http://santmat.info/modules/

Ein kleiner Hinweis zur Einstellung der Anzahl der Ebenen in der Vorkonfiguration. Die sollten natürlich in allen Kategorien, etc. auf die gleiche Anzahl eingestellt sein. Eventuell vielleicht doch im Outputmodul per PHP-Zuweisung fix einstellen ($navlevel=1..4).

Hoffe, dies nützt so manchem von euch und danke an die Contenido-Entwickler und die zur Verfügung gestellten Module der Contenido-Forumsmitglieder.


:D Grüsse,
Christian.

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mo 11. Apr 2005, 21:33

Hallo Christian,
ein tolles Modul, ergibt viele Möglichkeiten.

Was hällst du davon, die Template Dateien komplett wegzulassen und nur noch List Elemente <li> mit einer class auszugeben. Dann könntest du alles komplett im CSS formatieren! Die Änderungen dazu sind minimal.

Schau dir mal den Quellcode der Seiten von www.sankt-himi.de an, dort kannst du so etwas sehen. (Modul stammt von www.x28.de)

Vielen Dank für dieses Modul
Florian

chrism
Beiträge: 14
Registriert: Mo 30. Jun 2003, 09:34
Wohnort: Wien
Kontaktdaten:

Beitrag von chrism » Di 12. Apr 2005, 13:39

Hallo Beleuchtfix,

gute Idee, ich seh mir das mal an und melde mich in den nächsten 2-3 Tagen.

Gruß,
Christian.

OAA
Beiträge: 134
Registriert: Sa 15. Nov 2003, 15:54
Wohnort: Regensburg
Kontaktdaten:

Beitrag von OAA » Di 12. Apr 2005, 13:48

Hi,

ich habe das Problem, dass man jetzt in der ersten ebene keine links mehr hat!

Sprich man kann da nicht draufklicken und einen artikel öffnen.

VLG
OA

chrism
Beiträge: 14
Registriert: Mo 30. Jun 2003, 09:34
Wohnort: Wien
Kontaktdaten:

Beitrag von chrism » Di 12. Apr 2005, 17:17

Hallo OA,

hatte für meine Zwecke die Links aus navfirst_on.html und navfirst_off.html ausgebaut, da ich die erste Ebene als Titel für je eine Gruppe von Navigationslinks der zweiten Stufe verwende.

Ändere navfirst_on.html / navfirst_off.html gemäß navsecond_on/off.html (<a> tags einbauen), dann hast du auch in der ersten Ebene wieder Links.

Gruss,
Christian.

hes
Beiträge: 44
Registriert: Di 3. Jan 2006, 17:01
Kontaktdaten:

Re: Hauptnavigation (bis 4st, css) mit 1-4 fixen Ebenen

Beitrag von hes » Di 3. Jan 2006, 18:46

chrism hat geschrieben:biete mal als meinen Beitrag eine überarbeitete und erweiterte 4-stufige Hauptnavigation mit CSS-Formatierung an, bei der man 1 bis 4 Ebenen fest anzeigen lassen kann, den Rest dynamisch wie gewohnt....
tausend Dank! ... Du hast mir gerade seeeehr viel Arbeit erspart.

Eingebaut und ein wenig modifiziert (layout-technisch) und funktioniert wie gewünscht.
Mfg. hes

rene04
Beiträge: 600
Registriert: Mo 10. Okt 2005, 12:28
Wohnort: Kaiserslautern
Kontaktdaten:

Beitrag von rene04 » Mo 23. Okt 2006, 12:17

ganz toll :) hat mir auch viel arbeit erspart.

kann man das auch so machen das ich mit ModRewrite die *.hmtl Endung angezeigt bekomme? Ich habs mit php leider überhaupt nicht drauf :(

gruesse

TripleM
Beiträge: 42
Registriert: Sa 5. Mär 2005, 12:13
Kontaktdaten:

Re: Hauptnavigation mit 1-4 fixen Ebenen - ausblenden?

Beitrag von TripleM » Mo 2. Apr 2007, 09:44

Super Modul erstmal, viiielen Dank! Ich habe jetzt allerdings noch ein klitzekleines Problem damit, kannst Du mir da vielleicht noch weiterhelfen?

Ich habe mit Deinem Modul ein horizontales Menü gebastelt, wo die Unterpunkte erst beim Mouseovern aufklappen (mit CSS umgesetzt). Nun ist es so, daß ich in der dritten Ebene nicht immer Inhalte stehen habe, meine CSS-Formatierung aber einen weißen Rand von einem Pixel hat. Das bedeutet:

Wenn ich in der zweiten Navigationsebene mit der Maus über einen Menüpunkt fahre klappt immer die dritte Navigationsebene auf, wohl bedingt durch diesen Code in Deinem Modul:

Code: Alles auswählen

if (is_array($data['sub'])) {

            echo '<ul>';

                foreach ($data['sub'] as $key => $data) {

                    /* 3. Navigations Ebene */
Da aber dieses "<ul>" einen weißen Rahmen hat sehe ich bei fehlenden Inhalten in der dritten auklappenden Ebene dann immer einen breiten weißen Streifen, generiert aus dem entstehenden "<ul></ul>".

Gibt es eine Möglichkeit noch eine weitere Abfrage einzubauen, damit die Ebene nicht einfach nur bei passendem navlevel eingeblendet wird, sondern bei fehlendem Startartikel in dieser Kategorie wiederum ausgeblendet wird?

Also zum Beispiel

Code: Alles auswählen

if (is_array($data['sub']) and STARTARTIKEL == 1)  { usw
wenn ich fit in PHP wäre wüßte ich bestimmt wie das geht - da ich aber eine PHP-Lusche bin, könntest Du mir da vielleicht weiterhelfen?

Das wäre super.

DANKE!

Martin S.
Beiträge: 183
Registriert: Fr 14. Jan 2005, 10:46
Kontaktdaten:

Beitrag von Martin S. » Mo 2. Apr 2007, 12:36

Super Modul, läuft auch sauber bei mir, ich habe es in 3 Teile zerlegt und in verschiedene Ecken der Webseite ausgegeben.
Aber habt ihr nicht das Problem, dass man nicht alle Unterebenen gleichzeitig aufklappen möchte, sondern nur die von der ausgewählten Kategorie.
Und mir ist noch aufgefallen, dass das on/off nur für die letzte ausgewählte Kategorie wirksam wird, die übergeordneten Kategorien gehen einfach wieder auf off, seltsam.

kashban
Beiträge: 44
Registriert: Fr 7. Mai 2004, 10:29
Kontaktdaten:

Beitrag von kashban » Di 8. Mai 2007, 20:57

Großartig! Funktioniert prima, auch unter 4.6.15.

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Beitrag von stefkey » Di 15. Mai 2007, 23:03

Hallo,

ich bekomme folgende Fehlermeldung:

Fatal error: Call to undefined function: checkcatpermission() in /web/xxx/front_content.php(1021) : eval()'d code on line 582


Hat jemand einen Tip wie ich den Fehler beseitige?


Grüße
stefkey

franky
Beiträge: 68
Registriert: Mi 31. Aug 2005, 08:55
Kontaktdaten:

Beitrag von franky » Sa 9. Jun 2007, 18:23

Habe den Code noch mal abgändert, sodass nichts aus den Templates geholt wird. Jetzt ist es eine reine Liste mit '<ul><li>'-Verschachtelungen. Denke, da nicht mehr auf die Templates zurückgegriffen wird, dass es ein wenig performanter sein sollte. Vielleicht kann es ja noch wer gebrauchen.. mfg Frank

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname :     Navigation 1.2
* Author        :     Jan Lengowski
* Copyright    :     Contenido - four for business
* Created      :     15-05-2003
* Modified      :     04-2005, Christian Meilinger
* Modified     : 06-2007, franky
************************************************/

if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
* Array storing alle the
* navigation data
*/
$navitems = array();

/* Parrentid at static navtree to which dynamic navtree has to be connected */
$navitemsparentid = 0;

$navlevel = "CMS_VALUE[1]";

/**
* 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]';
}


/* Get IDCat from first child for submenue */
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid = '$sel_idcat'";

$db->query($sql);
$db->next_record();

if ($db->f("idcat") != 0) {
  $sel_idcat = $db->f("idcat");
}


/**
* Recursive function for creating
* the dynamic part of the navigation array
* @param Int $idcat Category id
*/
function nav($idcat) {

        global $navitems, $navitemsparentid, $navlevel, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $navi_temp = array();

        /* If no parent or level below limit, end function */
       $sql = "SELECT
                      B.parentid
                  FROM
                      ".$cfg["tab"]["cat_tree"]." AS A,
                      ".$cfg["tab"]["cat"]." AS B
                  WHERE
                      A.idcat     = B.idcat   AND
                      B.idcat     = '$idcat'   AND
                      A.level     > '$navlevel'";

        $db->query($sql);
        $db->next_record();

        $parentid = $db->f("parentid");

        if ( $parentid == 0 ) {

           if ($navitems != array()) {
              $navitemsparentid = $idcat;
           } else {
              $navitemsparentid = 0;
           }

           return true;
        }

        /* Navigationsitems der Brüder sammeln */
        $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' AND
                    A.level      > '$navlevel'
                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';

                $navi_temp[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                      "name"      => $db->f("name"),
                                                                      "target"    => $target);
        }

        $navi_temp[$idcat]["sub"] = $navitems;
        $navitems = $navi_temp;

        /* Function call */
        nav($parentid);

        return true;

}  // end function

/* Create dynamic part of Navigation Array */
nav($sel_idcat);


/**
* Recursive function for creating
* the fixed part of the navigation array
* @param Int $idcat Category id
*/
function navfixed($idcat) {

        global $navlevel, $navitems, $navitemsparentid, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $navarray = array();

        /* Collect navigationsitems of children */
        $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  = '$idcat' AND
                    A.level <= '$navlevel'
                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';

                $navarray[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                    "name"      => $db->f("name"),
                                                                    "target"    => $target,
                                                                    "sub"        => array());

                $navarray[$db->f("idcat")]["sub"] = navfixed($db->f("idcat"));

                /* Connect dynamic part of nav with static part */
                if ($db->f("idcat") == $navitemsparentid) {
                   $navarray[$db->f("idcat")]["sub"] = $navitems;
                }

        }

        return $navarray;

}  // end function

/* Create Navigation Array */
$navitems = navfixed('CMS_VALUE[0]');

/* Start Output buffer */
ob_start();

foreach ($navitems as $key => $data) {
	echo '<ul>';
    /* 1. Navigations Ebene */
    if ($idcat == $data['idcat']) {
        echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="'.$data['idcat'].'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
    } else {
        echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="'.$data['idcat'].'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
    }

    if (is_array($data['sub'])) {
		echo '<ul>';
        foreach ($data['sub'] as $key => $data) {

            /* 2. Navigations Ebene */

            if ($idcat == $data['idcat']) {
            	echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="'.$data['idcat'].'" target="'.$data['target'].'">'.$data['name'].'</a><li>';
            } else {
            	echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="'.$data['idcat'].'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
            }

            if (is_array($data['sub'])) {

            echo '<ul>';

                foreach ($data['sub'] as $key => $data) {

                    /* 3. Navigations Ebene */
                    if ($idcat == $data['idcat']) {
						echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
                    } else {
						echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
                    }

                    if (is_array($data['sub'])) {

                    echo '<ul>';

                        foreach ($data['sub'] as $key => $data) {

                            /* 4. Navigations Ebene */
		                    if ($idcat == $data['idcat']) {
								echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
		                    } else {
								echo '<li><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" target="'.$data['target'].'">'.$data['name'].'</a></li>';
		                    }

                        } // end foreach

                    echo '</ul>';

                    } // end if

                } // end foreach

            echo '</ul>';

            } // end if

        } // end foreach
	echo '</ul>';
    } // end if
	echo '</ul>';
} // end foreach

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>

kloevekorn
Beiträge: 199
Registriert: Mo 31. Okt 2005, 15:26
Wohnort: Hamburg
Kontaktdaten:

Beitrag von kloevekorn » So 23. Dez 2007, 12:40

Wie das so ist, funzt der obige Link zum Modulcode nicht mehr. Hat jemand vielleicht den ganzen Modulcode (in- und output) zur Hand und kann ihn hier posten?

Mit oder ohne Template ist mir fast egal. Vielleicht kann man ja in diesem Thread auch beide wieder dauerhaft veröffentlichen?

merci.

kashban
Beiträge: 44
Registriert: Fr 7. Mai 2004, 10:29
Kontaktdaten:

Beitrag von kashban » So 23. Dez 2007, 15:44

Hier ist der Code für das Modul mit Templates:

Input:

Code: Alles auswählen

/**
* Navigation
*
* INPUT
*
* @autor Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG 2003
* Modified    :     04-2005, Christian Meilinger
*/

?>
<table cellspacing="0" cellpadding="10" border="0">

    <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>
    <tr>
        <td class="text">Grössten immer sichtbar gehaltenen Level des Navigationsbaumes wählen:</td>
        <td>
            <select name="CMS_VAR[1]">
            <?php

                    if ( "CMS_VALUE[1]" == "1" ) {
                        echo '<option selected="selected" value="1">1 (Dynamic Menu)</option>';

                    } else {
                        echo '<option value="1">1 (Dynamic Menu)</option>';

                    }
                    if ( "CMS_VALUE[1]" == "2" ) {
                        echo '<option selected="selected" value="2">2</option>';

                    } else {
                        echo '<option value="2">2</option>';

                    }
                    if ( "CMS_VALUE[1]" == "3" ) {
                        echo '<option selected="selected" value="3">3</option>';

                    } else {
                        echo '<option value="3">3</option>';

                    }
                    if ( "CMS_VALUE[1]" == "4" ) {
                        echo '<option selected="selected" value="4">4 (Static Menu)</option>';

                    } else {
                        echo '<option value="4">4 (Static Menu)</option>';

                    }

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

</table>

<?php
Output:

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname :     Navigation 1.2
* Author        :     Jan Lengowski
* Copyright    :     Contenido - four for business
* Created      :     15-05-2003
* Modified      :     04-2005, Christian Meilinger
************************************************/

if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/* Template Instance */
$tpl = new Template;

/**
* Array storing alle the
* navigation data
*/
$navitems = array();

/* Parrentid at static navtree to which dynamic navtree has to be connected */
$navitemsparentid = 0;

$navlevel = "CMS_VALUE[1]";

/**
* 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]';
}


/* Get IDCat from first child for submenue */
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid = '$sel_idcat'";

$db->query($sql);
$db->next_record();

if ($db->f("idcat") != 0) {
  $sel_idcat = $db->f("idcat");
}


/**
* Recursive function for creating
* the dynamic part of the navigation array
* @param Int $idcat Category id
*/
function nav($idcat) {

        global $navitems, $navitemsparentid, $navlevel, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $navi_temp = array();

        /* If no parent or level below limit, end function */
       $sql = "SELECT
                      B.parentid
                  FROM
                      ".$cfg["tab"]["cat_tree"]." AS A,
                      ".$cfg["tab"]["cat"]." AS B
                  WHERE
                      A.idcat     = B.idcat   AND
                      B.idcat     = '$idcat'   AND
                      A.level     > '$navlevel'";

        $db->query($sql);
        $db->next_record();

        $parentid = $db->f("parentid");

        if ( $parentid == 0 ) {

           if ($navitems != array()) {
              $navitemsparentid = $idcat;
           } else {
              $navitemsparentid = 0;
           }

           return true;
        }

        /* Navigationsitems der Brüder sammeln */
        $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' AND
                    A.level      > '$navlevel'
                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';

                $navi_temp[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                      "name"      => $db->f("name"),
                                                                      "target"    => $target);
        }

        $navi_temp[$idcat]["sub"] = $navitems;
        $navitems = $navi_temp;

        /* Function call */
        nav($parentid);

        return true;

}  // end function

/* Create dynamic part of Navigation Array */
nav($sel_idcat);


/**
* Recursive function for creating
* the fixed part of the navigation array
* @param Int $idcat Category id
*/
function navfixed($idcat) {

        global $navlevel, $navitems, $navitemsparentid, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $navarray = array();

        /* Collect navigationsitems of children */
        $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  = '$idcat' AND
                    A.level <= '$navlevel'
                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';

                $navarray[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                    "name"      => $db->f("name"),
                                                                    "target"    => $target,
                                                                    "sub"        => array());

                $navarray[$db->f("idcat")]["sub"] = navfixed($db->f("idcat"));

                /* Connect dynamic part of nav with static part */
                if ($db->f("idcat") == $navitemsparentid) {
                   $navarray[$db->f("idcat")]["sub"] = $navitems;
                }

        }

        return $navarray;

}  // end function

/* Create Navigation Array */
$navitems = navfixed('CMS_VALUE[0]');

/* Start Output buffer */
ob_start();

//echo '<ul id="Navigation">';

foreach ($navitems as $key => $data) {

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'ID', '_'.$data['idcat']);
    $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/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->set('d', 'ID', '_'.$data['idcat']);
            $tpl->next();

            if ($idcat == $data['idcat']) {
                $tpl->generate('templates/navsecond_on.html');
            } else {
                $tpl->generate('templates/navsecond_off.html');
            }

            if (is_array($data['sub'])) {

//            echo '<ul id="Navigation">';

                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');
                    }

                    if (is_array($data['sub'])) {

//                    echo '<ul id="Navigation">';

                        foreach ($data['sub'] as $key => $data) {

                            /* 4. 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/navfourth_on.html');
                            } else {
                                $tpl->generate('templates/navfourth_off.html');
                            }

                        } // end foreach

//                    echo '</ul>';

                    } // end if

                } // end foreach

//            echo '</ul>';

            } // end if

        } // end foreach

    } // end if

} // end foreach

//echo '</ul>';

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>

Grüße,
Kashban

PS: Templates gibt's auf Anfrage

kloevekorn
Beiträge: 199
Registriert: Mo 31. Okt 2005, 15:26
Wohnort: Hamburg
Kontaktdaten:

Beitrag von kloevekorn » So 23. Dez 2007, 16:06

dankeschön!
Grüße,
jan

Gesperrt