Veränderte Ansicht in Hauptnavigation

Gesperrt
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Veränderte Ansicht in Hauptnavigation

Beitrag von dekurio »

Hallo Contenido- und PHP-Profis,

bin gerade dabei eine neue Website einzurichten. Dabei verwende ich erstmals ein CMS. Komme an sich auch gut vorran. Allerdings bin ich mit der Ausgabe der Standard-Hauptnavigation aus Contenido 4.4.4 nicht so ganz zufrieden.

Derzeit sieht das so aus:

Die Navigation hat drei Ebenen. Klicke ich auf einen Link der ersten Ebene wird die Darstellung derselben entsprechend des Templates "navfirst_on.html" angezeigt, die zweite Ebene (Template "navsecond_off.html" wird ebenfalls ausgegeben. So weit normal (und hoffentlich verstanden :wink: ).

Klicke ich nun auf einen Menüeintrag der zweiten Ebene wird hierfür das Template "navsecond_on.html" zur Darstellung verwendet. Das ist natürlich so gewünscht, a-b-e-r: Gleichzeitig bleibt auch für die übergeordnete erste Ebene das Template "navfirst_on.html" aktiviert.

Bei mir ist das so, dass nicht ausgewählte Menüpunkte grau unterlegt sind. Ausgewählte Menüpunkte erhalten durch die Templates einen blauen Hintergrund. Damit möchte ich eigentlich das gerade aktive Element erkennbar machen. Da nun bei einem Klick auf einen Link der zweiten Ebene trotzdem die erste Ebene weiterhin blau unterlegt wird, ist dies der Übersicht nicht gerade hilfreich. Wenn nun auch noch ein Menüpunkt dritter Ebene angeklickt wird ist das Chaos perfekt, es sind drei Menüpunkte mit blauem Hintergrund versehen (1., 2. und 3. Ebene). Der Besucher weiß schließlich gar nicht mehr, welcher Menüpunkt eigentlich aktiv ist.

Meine Seite ist zwar noch lange nicht fertig, wer sich das Menü dennoch ansehen will kann dies gerne machen. Wenn man es sieht, kann man es einfach besser verstehen.

http://www.dropsoft.de/cms/front_content.php

Jetzt mein eigentliches Anliegen:

Kann von euch jemand das Standard-Modul "Hauptnavigation" derart umschreiben, dass nur noch für den aktiven, sprich zuletzt angeklickten Menüpunkt, das "_on"-Template geladen wird (z.B. "navsecond_on.html"). Alle anderen Menüpunkte sollten über das "nav*_off.html"-Template angezeigt werden.

Meine PHP-Kenntisse halten sich sehr in Grenzen. Habe mir den Code zwar angeschaut, traue mich da aber nicht ran. Mit Datenbankabfragen hab ich es noch nicht so. Will nix kaputt machen.

Wenn ihr mir hier also weiter helfen könntet, wäre das super.


HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
scipio
Beiträge: 104
Registriert: Mo 9. Feb 2004, 18:03
Wohnort: Grevenbroich - NRW
Kontaktdaten:

Beitrag von scipio »

Schau dir bitte mal die Nav auf

http://www.sotonic.de

an. Meinst Du das? Hab' da damals was an dem Modul verändert.
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Beitrag von dekurio »

@scipio:

Ganz genau so was stelle ich mir vor. Verrätst du mir, wie du das angestellt hats?!? *schleimbücklingfreundlichbisüberbeideohrengrins* :wink:

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
scipio
Beiträge: 104
Registriert: Mo 9. Feb 2004, 18:03
Wohnort: Grevenbroich - NRW
Kontaktdaten:

Beitrag von scipio »

Kein Problem: Modul erstellen mit folgenden Inhalten:

INPUT

Code: Alles auswählen

/**
 * Navigation
 *
 * INPUT
 *
 * @autor Jan Lengowski <Jan.Lengowski@4fb.de>
 * @copyright four for business AG 2003
 * modifiziert am 17.02.2004 | juergen@sotonic.de | auf <div> umgestellt und Ausgabe angepasst
 */

?>
<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

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

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'])) {

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

                    /* 3. Navigations Ebene */
                    $tpl->reset();
                    $tpl->set('d', 'NAME',  $data['name']);
                    $tpl->set('d', 'TARGET', $data['target']);
                    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
                    $tpl->next();

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

                } // end foreach

            } // end if

        } // end foreach

    } // end if

} // end foreach

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

/* Clean buffer */
ob_end_clean();

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

?>
Die Nav-Templates hab ich glaub ich schon mal gepostet, müssten diese hier sein:

http://www.sotonic.de/contenido/cms/upl ... ion-JB.zip

Die Bilder gehören in das Upload-Verzeichnis, dort in einen Ordner "style", alles über die Dateiverwaltung.
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Beitrag von dekurio »

Danke, werd das heut Nachmittag ausprobieren, denn jetzt ist die Zeit knapp.

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Beitrag von dekurio »

Nachtrag:

Das ZIP-Archiv das du mir genannt hast ist Passwort geschützt. Hab aber intuitiv beim ersten Versuch das richtige Kennwort eingegeben. :twisted:

Also thanx erstmal, meld mich wenn ich des Script eingerichtet habe nochmal.

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Klappt wunderbar

Beitrag von dekurio »

Hi Jürgen,

habe dein modifiziertes Modul soeben installiert. Klappt alles wunderbar. Arbeitet auch problemlos mit meinen eigenen Templates zusammen.

Nochmals vielen Dank für deine schnelle und fachliche Hilfe.

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
scipio
Beiträge: 104
Registriert: Mo 9. Feb 2004, 18:03
Wohnort: Grevenbroich - NRW
Kontaktdaten:

Beitrag von scipio »

Achtung:

Die Standard-Templates sind auf ein Tabellenlayout ausgelegt:

<tr>...</tr>.

In dem Output fehlen aber die <table>-Tags. Ergo ist der Quellcode nicht sauber. Früher zickte der Mozilla rum, wenn <table>-Tags fehlten. Der IE ignoriert das.

Also testen oder <table>-Tags im Output hinzufügen!
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Beitrag von dekurio »

Danke für den Hinweis, hatte jedoch die Table-Tags bereits aus der Urversion des Hauptnavigations-Moduls entfernt und in die Templates integriert. Deshalb also alles kein Problöm. Funzt schon genau so wie es soll.

Bin stolz auf dich... :wink:

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

NAchtrag

Beitrag von dekurio »

Hi Jürgen,

sag mal, wäre es dir möglich den Code noch dahingehend zu ändern, so das eine aktive Kategorie nicht als Link, sondern nur als einfacher Text angezeigt wird? Bislang ist es so, dass auch eine gerade angezeigte Seite nochmal im Menü angeklickt werden kann. Dabei wird diese natürlich nur neu geladen. Ist doof... :wink:

Kannst du das was dran drehn? Wäre toll.

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
scipio
Beiträge: 104
Registriert: Mo 9. Feb 2004, 18:03
Wohnort: Grevenbroich - NRW
Kontaktdaten:

Beitrag von scipio »

Diese Funktion musst du im entsprechenden Navigationstemplate ...on.htm vornehmen. Einfach die <a>-Tags raus.

Oder nimm meine Templates ;-)
dekurio
Beiträge: 18
Registriert: So 25. Jan 2004, 17:35
Wohnort: Isen, Bavaria, Germany
Kontaktdaten:

Beitrag von dekurio »

Hi Jürgen,

jetzt schäm ich mich aber... :oops: Ist ja klar. Hät' ich eigentlich selbst drauf kommen müssen. Hab wohl den Wald vor lauter Bäumen nicht gesehen. Oh Mann, oh Mann.... :?

Danke dir, dass du mein Hirn wieder ein Stück zurecht gerückt hast. War wohl zu lange auf...

HAPPY NETTING,

Dekurio
"Die Menschen stolpern nicht über Berge, sondern über Maulwurfshügel"
(Konfuzius)
scipio
Beiträge: 104
Registriert: Mo 9. Feb 2004, 18:03
Wohnort: Grevenbroich - NRW
Kontaktdaten:

Beitrag von scipio »

Dafür ist das Forum ja da!
Gesperrt