Hauptmenü horizontal mit Untermenü vertikal!

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Hauptmenü horizontal mit Untermenü vertikal!

Beitrag von yodatortenboxer » Do 22. Jan 2004, 15:02

Hallo,

hab hier im Forum nach einer Möglichkeit gesuch eine Horizontale Hauptnavigation oben und eine Unternavigation an der linkes Seite zu realisieren. Bedinung war aber das ich die Unternavigation auch frei in einen eigenen Container stecken und dann positionieren kann. Habe dann hier einen Beitrag von herby http://www.contenido.de/forum/viewtopic.php?t=2139 gelesen und den geänderten Quelltext von ihm in zwei Module gesteckt und ebenfalls leicht geändert. Konnte dadurch dann das eine Modul Hauptnavigation in den Container1 und das Modul Unternavigation in den Container2 stellen. Nach ändern der Dateien navfirst_off.html und navfirst_on.html in navfirst_h_off.html und navfirst_h_on.html aus dem Verzeichnis \templates und entfernen der Table-Tags hatte ich eine Horizontale Hauptnavigation. Nun kann ich die Navigation wie zum Beispiel auf der Seite http://www.abs-ag.de einsetzten.
Hier ist der Modulaufbau beider Module:

Code: Alles auswählen

/******************************************************************
*
* CONTENIDO MODUL 
*
* Hauptnavigation - als unabhängiges Modul zur Unternavigation
*
* Zwei Module werden benötigt und hier beschrieben
*
* Mit Hilfe dieser zwei Module kann man zum Beispiel
* eine Horizontale Hauptnavigation in einem Container
* und eine vertikale Unternavigation in einem anderen Container
* oder umgekehrt realisieren (oben Haupt- und links oder rechts Unternavigation.
*
* Um die Haupnnavigation oder Unternavigation horizontal einzustellen
* kopiert die nav["" | "second" | "third"]_["off" | [on].html
* nach nav["" | "second" | "third"]_h_["off" | [on].html
* (z.B. cp navsecond_off.html navsecond_h_off.html
* - liegen im Pfad .../contenido/cms/templates/) und
* schmeisst dort die Tabellen-Tags raus (die stehen jetzt schon im Modul) 
*
* Orginal 
* Modulname : Navigation 1.1 
* Author : Jan Lengowski 
* Copyright : Contenido - four for business 
* Created : 15-05-2003 
* Modified :26-05-2003
* Modified : by herby
* Modified : by yodatortenboxer
*
*******************************************************************

/******************************************************************
*Hauptnavigation Eingabe:
******************************************************************/

/**
 * 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

/******************************************************************
*Hauptnavigation Ausgabe:
******************************************************************/

<?php 
// Hauptnav 
/*********************************************** 
* 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"><tr><td>'; 

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_h_on.html'); 
} else { 
$tpl->generate('templates/navfirst_h_off.html'); 
} 
if (is_array($data['sub'])) { 
$tmp_data = array(); 
$tmp_data = $data; 
} // end if 
} // end foreach 
echo '</td></tr></table>'; 

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

/* Clean buffer */ 
ob_end_clean(); 

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

?> 

/******************************************************************
*
* Unternavigation Zweites benötigtes Modul
*     -abhängig von der Hauptnavigation
*     -als zweites freipositionierbares Modul einsetzbar
*     
******************************************************************/

/******************************************************************
* Unternavigation Eingabe: bleibt Leer
******************************************************************/

/******************************************************************
* Unternavigation Ausgabe:
******************************************************************/

<?php 
if (is_array($tmp_data['sub'])) { 
$data = $tmp_data; 
echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>'; 
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_h_on.html'); 
} else { 
$tpl->generate('templates/navsecond_h_off.html'); 
} 
if (is_array($data['sub'])) { 
$tmp_data2 = array(); 
$tmp_data2 = $data; 
} 
} // end for each 
echo '</td></tr></table>'; 
} // end if 

if (is_array($tmp_data2['sub'])) { 
$data = $tmp_data2; 
echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>'; 
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_h_on.html'); 
} else { 
$tpl->generate('templates/navthird_h_off.html'); 
} 
} // end foreach 
echo '</td></tr></table>'; 
} // end if ?>

farn75
Beiträge: 7
Registriert: Mi 28. Jan 2004, 14:14
Kontaktdaten:

Problem mit der 3. Ebene

Beitrag von farn75 » Mi 3. Mär 2004, 16:11

Hallo,
ich habe das Modul wie beschrieben eingesetzt. Es klappt eigentlich prima!
Ausnahme bildet die 3. Ebene. Angenommen ich habe in Ebene 2 drei Menüpunkte, unter dem 1. Menüpunkt befinden sich weitere Seiten, die 3. Ebene. Nun werden die Menüpunkte der 3. Ebene erst nach der kompletten 2. Ebene angezeigt, d.h. nicht unter dem 1. Menupünkt, zu dem sie gehören.
Da ich kein PHP kann, bin ich hier ziemlich hilflos!
Bitte könnte mir jemand weiterhelfen?
Danke im vorraus!

Lepkojus
Beiträge: 65
Registriert: Fr 5. Mär 2004, 10:42
Kontaktdaten:

Hauptmenü horizontal mit Untermenü vertikal

Beitrag von Lepkojus » Do 11. Mär 2004, 15:55

Verdammt mir geht es genauso. Hoffentlich kriegen wir das gebacken.

Gruß
Grüße
Hartmut Lepkojus

Lepkojus
Beiträge: 65
Registriert: Fr 5. Mär 2004, 10:42
Kontaktdaten:

Hauptmenü horizontal mit Untermenü vertikal!

Beitrag von Lepkojus » Do 11. Mär 2004, 16:47

Is ja gar nicht so schwer, man muß die foreach-schleifen nur ineinander verschachteln.

Ich hatte nur nen riesen Schreck bekommen, da ich schon soviel Arbeit investiert habe und dann das dilemma auf einmal.
Grüße
Hartmut Lepkojus

farn75
Beiträge: 7
Registriert: Mi 28. Jan 2004, 14:14
Kontaktdaten:

Hauptnavi waagerecht, Subnavi senkrecht

Beitrag von farn75 » Fr 12. Mär 2004, 10:06

Hallo,
ich habe versucht die foreach-Schleifen ineinander zuschachteln. Die 3. Ebene wird jetzt auch unter der 2. Ebene angezeigt! Aber wenn ich Menü 1 auswählen, wird mir auch unter allen anderen Menüpunkten das Untermenü von Menü 1 angezeigt.
Ich weiß nicht, wo der Fehler ist! Bitte, helft mir nochmal weiter!
Hier der von mir verbockte Code:

Code: Alles auswählen

<?php
if (is_array($tmp_data['sub'])) {
$data = $tmp_data;
// echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>';
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_h_on.html');
} else {
$tpl->generate('templates/navsecond_h_off.html');
}
if (is_array($data['sub'])) {
$tmp_data2 = array();
$tmp_data2 = $data;
}

if (is_array($tmp_data2['sub'])) {
$data = $tmp_data2;
// echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>';
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_h_on.html');
} else {
$tpl->generate('templates/navthird_h_off.html');
}
} // end foreach 3. Ebene
echo '<br>';
} // end if

} // end foreach 2. Ebene
echo '<br>';
} // end if

 ?>

mukraker
Beiträge: 54
Registriert: Do 19. Sep 2002, 15:20
Kontaktdaten:

funzt nicht

Beitrag von mukraker » Fr 12. Mär 2004, 18:47

so es funzt sowei!
nur. möchte in nun auch inter hor.navigation meine oberste ebene anzeigen lassen, sprich alle "namen" bäume !

in der Subnavi möchte ich dann die Unterkategorien des entsprechend gewählten baumes anzeigen lassen

Problem: Wie liste ich erst mal alle obersten Bäume in der Hor. Mainnavi auf ??
--> hab das jetzt so das ich in der konfiguration -keine-gewählt habe.
So wird das auch wunderbar angezeigt, doch leider fehlt dann die unternavi die die unterordner von home eingentlich anzeigen soll.



WARUM ?

Code: Alles auswählen

if (is_array($tmp_data['sub'])) { 
und

Code: Alles auswählen

if (is_array($tmp_data2['sub'])) { 
sind beide false!! !!!!

tantalus
Beiträge: 30
Registriert: Do 3. Mär 2005, 12:06
Kontaktdaten:

Grafische Navigation

Beitrag von tantalus » Do 3. Mär 2005, 12:11

Das Modul funtioniert ja prima, aber eine Frage hätte ich noch. Im angegebenen Beispiel "www.abs-ag.de" wurde die 1. Navigationsebene mit Grafiken umgesetzt. Wie geht denn das?

Cyclist
Beiträge: 90
Registriert: Fr 11. Feb 2005, 14:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von Cyclist » Do 3. Mär 2005, 12:35

Meinst du Kategoriengrafik links oben? Die ist unabhängig von der Navigation. Dazu musst du nur für jede Katgeorie ein eigenes Template definieren und an der Stelle jeweils eine andere Grafik zuweisen.

tantalus
Beiträge: 30
Registriert: Do 3. Mär 2005, 12:06
Kontaktdaten:

Beitrag von tantalus » Do 3. Mär 2005, 12:50

Die Lösung mit den verschiedenen Templates hatte ich mir auch scon überlegt, ist aber nicht besonders elegant, da dadurch natürlich eine große Anzahl von Templates entsteht.
Die Frage ist doch, gibt es eine Möglichkeit Grafiken dynamisch einzubinden, am besten mit rollover-Zuständen.

Cyclist
Beiträge: 90
Registriert: Fr 11. Feb 2005, 14:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von Cyclist » Do 3. Mär 2005, 20:19

Hast du dir schon mal folgendes Modul angeschaut: http://www.contenido.org/forum/viewtopic.php?t=7277

Du musst es nur auf deine Bedürfnisse anpassen.

clemens
Beiträge: 72
Registriert: Do 13. Nov 2003, 11:32
Kontaktdaten:

Beitrag von clemens » So 6. Mär 2005, 12:26

hallo!
also ich krieg das leider nicht hin.
wie genau müssen meine template-datein aussehen, damit meine hauptnavi horizontal verläuft?

bitte um hilfe!

Cyclist
Beiträge: 90
Registriert: Fr 11. Feb 2005, 14:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von Cyclist » So 6. Mär 2005, 12:33

Hast du die zusätzlichen Templates laut Beschreibung angelegt und dabei in den Templates die Table Tags entfernt? Bei mir hat das dann ohne Probleme funktioniert.

Was funktioniert denn bei dir nicht? Kann man sich irgendwo ein Beispiel ansehen?

clemens
Beiträge: 72
Registriert: Do 13. Nov 2003, 11:32
Kontaktdaten:

Beitrag von clemens » So 6. Mär 2005, 13:56

was bedeutet: "die Table Tags entfernt"?
wie genau muss diese template-datei aussehen?

könntest du mir die templates per mail schicken?

clemens@weinspitz.net

Cyclist
Beiträge: 90
Registriert: Fr 11. Feb 2005, 14:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von Cyclist » So 6. Mär 2005, 19:29

die Templates befinden sich unter cms/templates/. Dort findest du sämtliche Navigationstemplates.

Der Inhalt lautet in etwa:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
      <tr><td width="165" colspan="2" height="22" style="border: 0px; border-bottom:1px; border-color: #F7C473; border-style: dashed; background-color: #FFFFFF; padding-left:10px">
      <a target="{TARGET}" href="{HREF}">{NAME}</a></td></tr>
<!-- END:BLOCK -->
das änderst du einfach in

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
        <a target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
Wichtig ist eigentlich nur noch, dass die Namen der Templates mit den Angaben im Modul übereinstimmen.

clemens
Beiträge: 72
Registriert: Do 13. Nov 2003, 11:32
Kontaktdaten:

Beitrag von clemens » Mo 7. Mär 2005, 08:07

vielen dank. jetzt funktioniert alles.

Gesperrt