navigation

busi
Beiträge: 82
Registriert: Mi 18. Sep 2002, 13:36
Kontaktdaten:

navigation

Beitrag 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 :twisted: . 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??
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag 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),"&nbsp;");
		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),"&nbsp;");
	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
busi
Beiträge: 82
Registriert: Mi 18. Sep 2002, 13:36
Kontaktdaten:

navigation / submenu

Beitrag 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 8)
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag 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),"&nbsp;");
das &nbsp; ist die einrückung - da kannste auch stattdessen * oder - nehmen. auf http://rechtsstaat-austria.com habe ich - genommen
Gast

Beitrag 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?
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag 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
Pulitzer
Beiträge: 34
Registriert: Mi 18. Sep 2002, 09:15
Kontaktdaten:

Beitrag von Pulitzer »

Täusche ich mich - oder reagiert die Navigation nicht auf ein Umsortieren der Strukturpunkte?
Gast

Beitrag von Gast »

Hallo Pulitzer,

bei mir auch nicht.
Sehe aber noch nicht warum.

Gruss ekke
Pulitzer
Beiträge: 34
Registriert: Mi 18. Sep 2002, 09:15
Kontaktdaten:

Beitrag von Pulitzer »

Hi ekke, hast du zwischenzeitlich eigentlich eine Lösung für das Sortierproblem gefunden?
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b »

das Navigationsmodul, 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
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
jacke
Beiträge: 303
Registriert: Mi 25. Sep 2002, 19:37
Kontaktdaten:

Änderung

Beitrag 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
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag 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;&nbsp;"); 
      echo "<span style='background-color:".$nav_col_back.";'>".implode("",$mod_space)."</span>"; 
      if($nr == $idcat){ echo "<span style='background-color:".$nav_col_on."'>&nbsp;</span>"; } 
      else { echo "<span style='background-color:".$nav_col_off."'>&nbsp;</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.
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
jacke
Beiträge: 303
Registriert: Mi 25. Sep 2002, 19:37
Kontaktdaten:

Beitrag 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
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag 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>"; 
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b »

...erst denken - dann posten... :oops:
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
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
Gesperrt