Hauptnavigation mit 4 Ebenen für Contenido 4.4

Gesperrt
andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

Hauptnavigation mit 4 Ebenen für Contenido 4.4

Beitrag von andreas-rgd »

Ist nicht ganz neu, weil schonmal was darüber gepostet wurde. Soweit ich weiss, gab es bisher aber noch nicht den fertigen Modulcode.
Die Hauptnavi1.1-1.2 von Jan Legowski aus der 4.5 mit 4 Ebenen läuft in der 4.4 nicht, weil die Funktion isStartarticle hier nicht existiert. Das macht aber nichts, denn man braucht diesen Teil des Codes nicht übernehmen, sondern nur den Teil ab /* Start Output buffer */ . Die Änderung ggü. dem Orginalcode aus der 4.4 fügt lediglich eine weitere Verschachtelungsebene ein. Eigentlich braucht man nur diese zusätzliche Schachtel, aber so ist´s einfacher. Ich vermute, man könnte an dieser Stelle auch noch tiefer verschachteln - wer´s braucht.

Jedenfalls, ich hab´s bei mir getestet und es läuft einwandfrei. Die Konfiguration braucht auch nicht geändert werden. Einfach den Code ins Modul schmeissen und fertig. Ach ja, nicht vergessen, auch im Verzeichnis templates die beiden Dateien navfourth_on.html und navfourth_off.html anzulegen und ggf. dort die CSS-Formatierung für die 4. Ebene zu machen bzw. eine CSS-Klasse einzubinden.

Der Input-Teil kann unverändert bleiben. Für diejenigen, die das Modul nicht haben, poste ich einfach den kompletten Code des geänderten Moduls:
---------------------------------------------------------------------------------
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

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Navigation 1.1
* Author      :     Jan Lengowski
* Copyright   :     Contenido - four for business
* Created     :     15-05-2003
* Modified    :     26-05-2003
* Modified    :     25-06-2004 - Andreas Jänschke (4. Ebene eingefügt)
************************************************/

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
 */
if (!function_exists("catIsChildOf"))
{
    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'); 
                          } 
       
                  } // 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; 

?> 
Grüsse von Andreas
acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire »

Vielen Dank für die Anpassung!
Funktioniert wunderbar!
andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

acquire:

Beitrag von andreas-rgd »

Gern geschehen :) ... manchmal sind´s die Kleinigkeiten, die man gut gebrauchen kann.

Grüsse von Andreas
bachi
Beiträge: 161
Registriert: Di 20. Apr 2004, 12:22
Wohnort: Würzburg
Kontaktdaten:

Beitrag von bachi »

hab ne Frage zu dem Modul: Ist es so angedacht oder bin ich wieder nicht fähig, dass die Oerseite verschwindet wenn ich sie anklicke und die Unterseiten auftauchen? Ich brauche nämlich:
Oberseite
Seite 1
Seite 2

bei mir erscheint aber nur
Seite 1
Seite 2
wenn ich Oberseite angeklickt habe.
Falls der Fehler bei mir liegt, kann mir jemand dazu nen Tipp geben was ich wieder mal falsch machen konnte? :?
Danke
C 4.5.2 - 4.6
www.myworkstyle.de
www.hsgweb.de
--
::: It´s not a bug - it´s a feature!!! :::
abentzien
Beiträge: 9
Registriert: Mo 30. Aug 2004, 10:11
Kontaktdaten:

Leider geht es hier nicht.

Beitrag von abentzien »

Contenido 4.4.4 - der Output geht nicht. Rotes Licht und zudem keine Ausgabe mehr auf der Website......

Wo soll ich suchen?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

wenn die lampe rot ist hast einen fehler beim kopieren gemacht...
bei mir geht der output ohne rote lampe...
*** make your own tools (wishlist :: thx)
abentzien
Beiträge: 9
Registriert: Mo 30. Aug 2004, 10:11
Kontaktdaten:

Wenn 4. Ebene 'ON' geht Ebene 3 auf 'OFF' , 2 und 1 sind OK

Beitrag von abentzien »

Wie behebe ich dass denn?
Habe den Output ohne Änderungen hier übernommen.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

wenn du den mauspfeil über die rote lampe bewegst steht ne zeilennummer dort. da findet sich im normalfall der fehler...
*** make your own tools (wishlist :: thx)
abentzien
Beiträge: 9
Registriert: Mo 30. Aug 2004, 10:11
Kontaktdaten:

Die Lampe ist nun nicht mehr an...

Beitrag von abentzien »

...aber im Titel des Postings hatte ich ein neues Problem vertseckt. Wenn die 4. ebene auf 'ON' geht, dann geht die 3. EBene auf 'OFF'...diese sollte aber doch eigentlich ( wie bei 1. und 2. auch) ON bleiben.

DAS ist mein jetziges Problem...
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ach so

->

Code: Alles auswählen

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

Code: Alles auswählen

                    if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
                        $tpl->generate('templates/navthird_on.html'); 
                    } else { 
                        $tpl->generate('templates/navthird_off.html'); 
                    }
*** make your own tools (wishlist :: thx)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

Ich verwende dieses Navigationsmodul und frage mich, ob es eine Möglichkeit gibt, dass die 2. und vielleicht auch die 3. Ebene permanent aufgeklappt bleiben.

Vielen Dank für eure Hilfe,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

Keine Ideen ? Das Problem hatte doch sicherlich auch schon jemand von Euch ?
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
mäci
Beiträge: 36
Registriert: Sa 26. Feb 2005, 18:10
Kontaktdaten:

Beitrag von mäci »

wenn ihr die rote lampe bekommt liegt dies an der falschen konvertierung. ich denke du hast mac os, mit windows gehts.
chrism
Beiträge: 14
Registriert: Mo 30. Jun 2003, 09:34
Wohnort: Wien
Kontaktdaten:

Beitrag von chrism »

Habe die Hauptnavigation so umgeschrieben, dass man 1 bis 4 Ebenen permanent offen halten kann, die restlichen wie gewohnt dynamisch.

Gruss,
Christian.

http://contenido.org/forum/viewtopic.php?t=7940
bazz-design
Beiträge: 57
Registriert: Do 18. Nov 2004, 14:09
Kontaktdaten:

Beitrag von bazz-design »

Hey, ich hab das Modul ausprobiert läuft einwandfrei. Nun eine Frage ich möchte ein Navigationsmodul haben, welches nur die erste Ebene anzeigt. Keine SUb-Kategorien sonder nur Haupt.

Könnt ihr mir helfen?
Gesperrt