Seite 1 von 2
navigation
Verfasst: Mi 18. Sep 2002, 20:57
von busi
hallo zusammen
ich hoffe, du kannst mir weiterhelfen. ich habe die contenido version 4.2
installiert und soweit funktioniert auch alles. nun habe ich aber ein
problem mit der navigation. die von mir angelegte struktur sieht ungefähr so aus:
home
menu1
submenu1
subsubmenu1
submenu2
menu2
menu3
usw.
wenn ich nun in der navigation auf einen link eines subsubmenüs klicke,
dann verschwindet die komplette navigation

. ich möchte aber verständlicherweise, dass sie sichtbar bleibt, so ähnlich wie hier bei contenido.de.
hat jemand eine idee, wo das problem sein könnte??
Verfasst: Mi 18. Sep 2002, 21:14
von Sven777b
ich habe da mal eine Navigation gebastelt, die die main-navigation des Demo-Layouts ersetzt. Diese Navigation hat eine eigene Datenbank-Abfrage mit etwas besserer Performance und beherrscht beliebig viele Ebenen. Die originale im Demo beherrscht nur 2 Ebenen - darunter ist Feierabend weil der parent verloren geht.
nochmal hier gepostet:
Code: Alles auswählen
Zum Einbinden direkt ins Layout. Dieser Code ersetzt im Demo-Layout die <!-- main_navigation -->
Zuerst muss $mod_baum angepasst werden. Die Nummer kann man im Backend sehen, in dem man auf den entsprechenden Struktur-Punkt klickt.
Standard-Seitig ist 1=haupt (front_frame); 2=service (front_frame); 3=home (front_single); 4=service (front_single) 0 sollte auch gehen
Anschliessend können die Farben angepasst werden $mod_col_over und $mod_col_out sowie die Schriftart $mod_font_link
Wenn man den Code (ohne <?php ... ?> ) in den OUTPUT eines Modules legt, kann man die Navi auch als Modul einsetzen.
Bei Fragen und Problemen: Sven (webmaster@zu-hause.biz) ICQ:95176001
<?php
//Konfiguration
$mod_baum = 1; // Für welchen Baum ist das Menü
$mod_col_over = "#993333"; // Zellfarbe bei Mouse-Over
$mod_col_out = "#CC3333"; // Zellfarbe bei Mouse-Out
$mod_font_link = "left-menu"; // Style für Links
//Ende Konfiguration
$sql = "SELECT parentid, A.idcat, A.level, name, visible, public FROM $cfgTab_cat_tree AS A, $cfgTab_cat AS B, $cfgTab_cat_lang AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND B.idclient='$client' AND C.idlang='$lang' ORDER BY A.idtree";
$db->query($sql);
while($db->next_record()){
if($db->f("visible") == "1"){
if($db->f("public") == "1" | $auth->auth["uid"] != "nobody"){
$mod_cat_par[$db->f("idcat")] = $db->f("parentid");
$mod_cat_site[$db->f("idcat")][level] = $db->f("level");
$mod_cat_site[$db->f("idcat")][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&parent=".$db->f("parentid")."&subid=".$db->f("idcat")."&idcat=".$db->f("idcat")."");
$mod_cat_site[$db->f("idcat")][name] = $db->f("name");
if($mod_count < $db->f("idcat") ){$mod_count = $db->f("idcat"); };
};
};
};
$mod_tp = $idcat;
while($mod_tp > 0){
$mod_sitelist[$mod_cat_site[$mod_tp][level]] = $mod_tp;
$mod_tp = $mod_cat_par[$mod_tp];
};
if($mod_sitelist[0] != $mod_baum){$mod_sitelist = array($mod_baum);};
echo "<table width=100% cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
for ($i=0; $i<sizeof($mod_sitelist); $i++){
$mod_space = array();
$mod_space = array_pad($mod_space,($i)," ");
for($ii=0;$ii<=$mod_count;$ii++){
if($mod_cat_par[$ii] == $mod_sitelist[$i] && $mod_cat_site[$ii][link]){
echo "<tr><td onMouseOver=\"this.style['background']='".$mod_col_over."';\" ";
echo "onMouseOut=\"this.style['background']='".$mod_col_out."';\" bgcolor=\"$mod_col_out\" nowrap>".implode("", $mod_space);
echo "<a href=\"".$mod_cat_site[$ii][link]."\" onMouseOver=\"on('";
echo $mod_cat_site[$ii][name]."');return true;\" onMouseOut=\"off();return true;\" id=\"$mod_font_link\">";
echo $mod_cat_site[$ii][name]."</a></td></tr>\n";
$mod_cat_par[$ii] = "-";
if($ii == $mod_sitelist[$i+1]){
$ii = $mod_count+1;
};
};
};
};
for ($i = sizeof($mod_sitelist)-1;$i >= 0; $i--){
$mod_space = array();
$mod_space = array_pad($mod_space,($i)," ");
for($ii=0;$ii<=$mod_count;$ii++){
if($mod_cat_par[$ii] == $mod_sitelist[$i] && $mod_cat_site[$ii][link]){
echo "<tr><td onMouseOver=\"this.style['background']='".$mod_col_over."';\" ";
echo "onMouseOut=\"this.style['background']='".$mod_col_out."';\" bgcolor=\"$mod_col_out\" nowrap>".implode("", $mod_space);
echo "<a href=\"".$mod_cat_site[$ii][link]."\" onMouseOver=\"on('";
echo $mod_cat_site[$ii][name]."');return true;\" onMouseOut=\"off();return true;\" id=\"$mod_font_link\">";
echo $mod_cat_site[$ii][name]."</a></td></tr>\n";
};
};
};
echo "</td></tr></table>";
?>
Hey super... die Schriftart für den Code ist jetzt spitze
navigation / submenu
Verfasst: Sa 21. Sep 2002, 13:24
von busi
hallo sven777b
ich bin ein wenig am rumprobieren mit deiner navigation. funktioniert so weit super. mein frage ist nun: gibt es eine möglichkeit, die unterpunkte der navigation besser hervorzuheben?
busi

Verfasst: Sa 21. Sep 2002, 22:27
von Sven777b
das kannst du zum einen per CSS regeln (in der originalen CSS-Datei ist der Font21 dunkelblau und hat drüber und drunter eine Linie)
dann kannst du mit den Spacern viel machen...
das ist diese Zeile hier (2x)
$mod_space = array_pad($mod_space,($i)," ");
das ist die einrückung - da kannste auch stattdessen * oder - nehmen. auf
http://rechtsstaat-austria.com habe ich - genommen
Verfasst: Sa 21. Sep 2002, 22:38
von Gast
Wie könnte man genau diese Navigation verändern, daß man 2 Teile erhält: der eine zeigt nur die Hauptnavigation an, der ander nur die Subnavigation.
Irgendeine Idee?
Verfasst: Sa 21. Sep 2002, 22:43
von Sven777b
in dem Falle das ganz normale Navigationsmenü nehmen.
für die Hauptnavigation stellst du es auf "Gruppen" und legst "home" als Startpunkt fest
für die unterkategorien müsste man meine Navi dann etwas umschreiben, damit sie die oberste Ebene nicht anzeigt
Verfasst: Mo 23. Sep 2002, 10:53
von Pulitzer
Täusche ich mich - oder reagiert die Navigation nicht auf ein Umsortieren der Strukturpunkte?
Verfasst: Mi 25. Sep 2002, 14:21
von Gast
Hallo Pulitzer,
bei mir auch nicht.
Sehe aber noch nicht warum.
Gruss ekke
Verfasst: Do 3. Okt 2002, 20:18
von Pulitzer
Hi ekke, hast du zwischenzeitlich eigentlich eine Lösung für das Sortierproblem gefunden?
Verfasst: Do 3. Okt 2002, 20:39
von Sven777b
das Navigations
modul, die Standard-Navigation und auch die erste von mir gepostete Navigation sind allesamt nicht dazu in der Lage, so zu sortieren, wie du es im backend festgelegt hast. Das wird auch definitiv nicht möglich sein.
Kernpunkt ist folgender: du kannst sortieren wie du willst... aber wenn du umstrukturierst, werden in der Datenbank preid und postid angepasst (table con_cat). D.h. die vorangehende und nachfolgende ID wird angepasst.
Sämtliche bisher veröffentlichte Navigationen ignorieren aber diese beiden Punkte.
Einzige Ausnahme die Layout + menü-Kombi die ich letztens gepostet habe. Weil dort eine neue SQL-Abfrage drinnen ist, die diesen Parameter ausliest:
http://contenido.de/forum/viewtopic.php?t=118
Änderung
Verfasst: Sa 5. Okt 2002, 10:30
von jacke
Hallo zusammen,
würde das Navi gerne ausprobieren. Bis jetzt benutze ich ein Navi im Container. Hab allerdings ein wenig Angst die front_content zu ändern. Haben die Änderungen auch Auswirkungen wenn es mit der Hauptnavi nicht funzt? d.h. läuft mein Container Modul nach der Änderung weiter?
Jacke
Verfasst: Mo 7. Okt 2002, 20:27
von Sven777b
Hallo Pulitzer,
also zu deiner Frage: nein - es wirkt sich nicht auf andere Module aus.
Aber wenn dir das zu heiss ist, kannst du den Teil, der in die front_content.php reinsoll , mit in dein Layout packen - so hatte ich es vorher. Das geht auch problemlos.
Also insgesamt das hier ins Layout quetschen:
Code: Alles auswählen
<!-- BEGIN MAIN_NAVIGATION -->
<?php
// Gruppen einlesen //
$sql = "SELECT A.idcat, A.parentid, A.preid, A.postid, B.name, B.public, B.visible, C.level FROM $cfgTab_cat AS A, $cfgTab_cat_lang AS B, $cfgTab_cat_tree AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND A.idclient='$client' AND B.idlang='$lang'";
$db->query($sql);
while($db->next_record()){
$con_tree[$db->f("idcat")][parent] = $db->f("parentid");
$con_tree[$db->f("idcat")][preid] = $db->f("preid");
$con_tree[$db->f("idcat")][postid] = $db->f("postid");
$con_tree[$db->f("idcat")][titel] = $db->f("name");
$con_tree[$db->f("idcat")][public] = $db->f("public");
$con_tree[$db->f("idcat")][visible] = $db->f("visible");
$con_tree[$db->f("idcat")][level] = $db->f("level");
$con_tree[$db->f("idcat")][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&parent=".$db->f("parentid")."&idcat=".$db->f("idcat")."");
if($db->f("idcat") > $con_tree_max){$con_tree_max = $db->f("idcat");}
};
//-----------------------------------------------------------------------------//
$nav_start = '3';
$nav_col_out = "#6699FF";
$nav_col_over = "#9999FF";
$nav_col_back = "#6600FF";
$nav_col_on = "#FF0000";
$nav_col_off = "#000000";
// offenen Pfad finden //
$nav_path = array();
$nav_tree = array();
$tmp_idcat = $idcat;
while($tmp_idcat > 0){
array_push($nav_path, $tmp_idcat);
$tmp_idcat = $con_tree[$tmp_idcat][parent];
};
$nav_path = array_reverse($nav_path);
if($nav_path[0] != $nav_start){$nav_path = array($nav_start);};
// Baum sortieren //
for($i = 0;$i < sizeof($nav_path);$i++){
$tmp_found=0;
for($nr = 0; $nr <= $con_tree_max; $nr++){
if($con_tree[$nr][parent] == $nav_path[$i] && $con_tree[$nr][preid] == '0'){$tmp_found=1;break;}
}
unset($tmp_level);$tmp_level = array();
do{
array_push($tmp_level , $nr);
$nr = $con_tree[$nr][postid];
} while($nr != '0' && $tmp_found==1);
if($i == 0){$nav_tree = $tmp_level;}
else {
$x = array_search("$nav_path[$i]", $nav_tree);
array_splice($nav_tree, $x+1, 0, $tmp_level);
};
};
// Baum ausgeben //
echo "<table width=100% cellspacing=\"5\" cellpadding=\"0\" border=\"0\">\n";
foreach($nav_tree as $nr){
if(($con_tree[$nr][public] == '1' or $auth->auth["uid"] != "nobody") and $con_tree[$nr][visible] == '1'){
echo "<tr><td onMouseOver=\"this.style['background']='".$nav_col_over."';\" ";
echo "onMouseOut=\"this.style['background']='".$nav_col_out."';\" bgcolor=\"$nav_col_out\" nowrap>";
unset($mod_space);$mod_space = array();
$mod_space = array_pad($mod_space,($con_tree[$nr][level] - 1),"&nsbp; ");
echo "<span style='background-color:".$nav_col_back.";'>".implode("",$mod_space)."</span>";
if($nr == $idcat){ echo "<span style='background-color:".$nav_col_on."'> </span>"; }
else { echo "<span style='background-color:".$nav_col_off."'> </span>"; };
echo "<a href=\"".$con_tree[$nr][link]."\" id=\"left-menu\">".$con_tree[$nr][titel]."</a></td></tr>";
};
};
unset($nav_tree);unset($nav_path);
echo "</table>";
?>
<!-- END MAIN_NAVIGATION -->
das läuft auch ohne die front_content anzupassen.
Verfasst: Mo 7. Okt 2002, 21:17
von jacke
Dank werd ich mal probieren. Aber ich habe noch was nerviges:
Hat sich einer schon mal an einem solchen Modul für front_frame versucht?
kann man dem Navi sagen in welchem Frame er das aufzumachen hat?
Jacke
Verfasst: Mo 7. Okt 2002, 21:31
von Sven777b
Hallo Jacke,
du kannst das Ziel hart im Link angeben (7. Zeile von unten)
Code: Alles auswählen
echo "<a href=\"".$con_tree[$nr][link]."\" id=\"left-menu\">".$con_tree[$nr][titel]."</a></td></tr>";
stattdessen:
Code: Alles auswählen
echo "<a href=\"".$con_tree[$nr][link]."\" id=\"left-menu\" target=\"ZIELFENSTER\">".$con_tree[$nr][titel]."</a></td></tr>";
Verfasst: Mo 7. Okt 2002, 21:33
von Sven777b
...erst denken - dann posten...
geht natürlich nicht einfach so - weil die Navigation dann nicht aktualisiert wird. Der Link stimmt - aber du musst ja auch das Navigationsframe aktualisieren, damit dort bei Bedarf die Untermenü´s angezeigt werden.
Das ist mir jetzt aber zu kompliziert das alles zu durchdenken. Ich mag die frame-lösung eh nicht