Navigation

Gesperrt
COS
Beiträge: 6
Registriert: Mo 20. Okt 2003, 09:54
Wohnort: Prien
Kontaktdaten:

Navigation

Beitrag von COS » So 9. Nov 2003, 23:48

Hallo!

Suche eine Hauptnavigation mit mehr als 3 Ebenen, hat jemand so etwas bzw wie kann ich meine dahingehend ändern

Gruß COS

jwulfes
Beiträge: 60
Registriert: Mo 8. Sep 2003, 20:35
Kontaktdaten:

Re: Navigation

Beitrag von jwulfes » Mo 10. Nov 2003, 09:17

COS hat geschrieben:Hallo!

Suche eine Hauptnavigation mit mehr als 3 Ebenen, hat jemand so etwas bzw wie kann ich meine dahingehend ändern

Gruß COS
Hallo COS,

das suche ich auch! Ich habe schon mal so ein wenig getestet, aber es funktionioert nicht (bin Anfänger und muss mich noch in alles einarbeiten).
Ich habe den Output Quelltext um 3 Ebenen erweitert (Paste and copy) und drei entsprechende Templates neu generiert. (Siehe Quelltext unten.
Was noch nicht funktioniert (und da merkt man das ich ein echter Anfänger bin) ist die farbige Unterlegung der Ebenen im Menü.
Schau einfach mal hier nach: http://www.tower-hill.de/cms/front_content.php?idcat=26
dann weißt Du was ich meine.
Es muss auf jeden Fall etwas im IN- und OUTPUT geändert werden, aber was?
Vielleicht kann uns da jemand helfen :!: :!: :!: :D
Vielen Dank schon mal!!!!

Gruß
Joerg

Code: Alles auswählen

<?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 */
ob_start();

echo '<table cellspacing="0" cellpadding="0" border="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');
                    }

					if (is_array($data['sub'])) {
		
						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');
							}

							if (is_array($data['sub'])) {
				
								foreach ($data['sub'] as $key => $data) {
				
									/* 5. 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/navfifth_on.html');
									} else {
										$tpl->generate('templates/navfifth_off.html');
									}

									if (is_array($data['sub'])) {
						
										foreach ($data['sub'] as $key => $data) {
						
											/* 6. 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/navsixth_on.html');
											} else {
												$tpl->generate('templates/navsixth_off.html');
											}


											} // end foreach
							
										} // end if
				
				
									} // end foreach
					
								} // end if
				
		
						   } // end foreach
			
						} // end if


                } // end foreach

            } // end if

        } // end foreach

    } // end if

} // end foreach

echo '</table>';

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

/* Clean buffer */
ob_end_clean();

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

?>

[/quote]

easy
Beiträge: 3
Registriert: Fr 9. Jan 2004, 16:22
Wohnort: Zierenberg
Kontaktdaten:

Ich suche auch solch eine Navigation.

Beitrag von easy » So 11. Jan 2004, 12:14

Ich habe Deine Seite gerade besucht. Jetzt scheint ja alles zu funktionieren, auch die farbunterlegung der einzelnen Menuepunkte. Ich habe nun den Quelltext bei mir eingebaut, es funktioniert aber nicht. Hast Du noch irgendetwas im Input verändert? Vielleicht kannst Du mir kurz schildern, was Du alles verändert hast.

Danke easy
Nur die Harten kommen in den Garten

jwulfes
Beiträge: 60
Registriert: Mo 8. Sep 2003, 20:35
Kontaktdaten:

Beitrag von jwulfes » Mo 12. Jan 2004, 09:37

Hallo easy,

Du musst im Verzeichnis template neue Dateien für die einzelnen Navigationsebenen einführen; und zwar "navthird_on.html"+ "navthird_on.html" + "navfourth_on.html" + "navfourth_off.html" und so weiter; je nachdem wieviele zusätzliche Ebenen Du haben möchtest. Die Einrückung der jeweiligen Menü kannst Du mit "padding-left":..px" beeinflussen!

Ich hoffe Dir damit geholfen zu haben! :D

Gruß
Jörg

ZuMe
Beiträge: 71
Registriert: Sa 20. Dez 2003, 13:36
Kontaktdaten:

Beitrag von ZuMe » Mi 21. Jan 2004, 18:05

GEIL ! :D
Danke Leute !

hubi
Beiträge: 2
Registriert: Fr 1. Aug 2003, 14:28
Kontaktdaten:

Re: Navigation

Beitrag von hubi » Di 10. Feb 2004, 17:06

COS hat geschrieben:Hallo!

Suche eine Hauptnavigation mit mehr als 3 Ebenen, hat jemand so etwas bzw wie kann ich meine dahingehend ändern

Gruß COS

Ich hatte gerade das selbe Problem. Nun habe mal vor einiger Zeit Contenido angeschaut und jetzt wieder die neue Version.
Das mit den Menüebenen hat mir aber nicht gefallen. Ich habe das Modul nach meinen Bedürfnissen angepasst, so dass es beliebig viele Ebenen geben kann.

Es werden keine Templates mehr reingeladen, obwohl das auch machbar wäre. Jetzt läuft die Menügenerierung durch eine rekursive Funktion (menudarstellen), die von selbst bis zum Ende läuft.

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Navigation 1.1
* Author      :     Jan Lengowski
* Copyright   :     Contenido - four for business
* Created     :     15-05-2003
* Modified    :     26-05-2003
* Modifiziert für beliebig viele Unterebenen, noch mit den eigenen styles drin, 
* Hubert Anliker
* 11.02.2004
* getestet mit Version 4.4.2
************************************************/

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 */
ob_start();
// hier rekursiver Aufbau des Menüs, aktiver Baum mit anderem Stil,andere geschlossen
echo "<table cellspacing='0' cellpadding='0' border='0' width='100%'>";
function menudarstellen($arrayelement,$verschiebung){
 global $idcat,$sess;
    foreach ($arrayelement as $key => $data) {
			
        if ($idcat == $data['idcat'] || is_array($data['sub'])) {
			
            echo "<tr><td  height='22'  style='padding-left:". ($verschiebung * 5 + 10) ."px ; border: 0px; border-bottom:1px; border-color: #212121; border-style: solid; background-color: #DEDEDE;'>\n";
            echo "<a target='" . $data['target'] . "' class='submenu' href='" . $sess->url('front_content.php?idcat='.$data['idcat']) . "'>" . $data['name'] . "</a></td></tr>\n";       
        } else {
            echo "<tr><td  height='22'  style='padding-left:". ($verschiebung * 5 + 10) ."px ; border: 0px; border-bottom:1px; border-color: #212121; border-style: solid; background-color: #DEDEDE;'>\n";
            echo "<a target='" . $data['target'] . "' class='submenuOff' href='" . $sess->url('front_content.php?idcat='.$data['idcat']) . "'>" . $data['name'] . "</a></td></tr>\n";       
        }
        if (is_array($data['sub'])) {
            menudarstellen($data['sub'],$verschiebung + 1);   
        } 
    
    } // end foreach
	return;
}
menudarstellen($navitems,0);


echo "</table>";

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

/* Clean buffer */
ob_end_clean();

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

?>

Ich hoffe, dass es euch dienlich ist, bin für coole Inputs dankbar

Gruss

Hubi

Gesperrt