Neues Hauptmenü (front_single)

Gesperrt
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Neues Hauptmenü (front_single)

Beitrag von Sven777b »

Gehört das nun hierher - oder in Erweiterungen *g*

ok... erstmal vorweg. Wer die andere schon gesehen hatte, der weiss was jetzt kommt. ;)
Beispiel: http://feg-borna.de/cms/frontend/

Das Menü hier ist direkt für das Layout. Es ist eine optimierte Version der "main-navigation", welche im Demo-Layout von front_single enthalten war. Nach einbau dieser Navigation könnte man theoretisch die front_content.php um einige MySQL-Abfragen erleichtern - das sollten aber nur die machen, die wissen was sie tun..

Zu den Features:
- erstmalig sortierung genau so , wie im backend vorgegeben.
- für jeden Baum einsetzbar
- Aufbau in Tabelle - Mouse-Over-Zellen
- Markierung des aktiven Menüpunktes
- optisch angepasste Stufung der Menüpunkte
- alle Farben konfigurierbar.

Konfiguration
In diesem Bereich wird konfiguriert:
$nav_start = '3'; // Start-Baum festlegen
$nav_col_out = "#6699FF"; // Zellfarbe normal
$nav_col_over = "#9999FF"; // Zellfarbe Mouse-Over
$nav_col_back = "#6600FF"; // Hintergrundfarbe (Einzug)
$nav_col_on = "#FF0000"; // Farbmarkierung aktiv
$nav_col_off = "#000000"; // Farbmarkierung passiv

Den Startbaum findet man übers Backend raus: Content->Seiten und dort mit der Maus über das Plus/Minus des Baumes (z.b. "haupt") fahren. In der Statusleiste des Browsers kann man die URL erkennen. In dieser URL steht idcat= - diese Nummer ist der Startpunkt. Bei normaler installation mit Beispielen ist das die "3" für "home" von "front_single".

Installation:
wenn noch das original-menü verwendet wird, befindet sich im Layout ein Bereich der durch
<!-- begin main-navigation-->
...
<!-- end main-navigation-->
eingegrenzt ist. Dazwischen gehört der folgende Code. Für alle anderen: schreibt den Code dorthin, wo später die Navigation sein soll :D

Code wurde korrigiert ( 27.09.02 15:08 )

Code: Alles auswählen

<?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'; // Startbaum festlegen
$nav_col_out  = "#6699FF"; // Zellfarbe normal
$nav_col_over = "#9999FF"; // Zellfarbe Mouse-Over
$nav_col_back = "#6600FF"; // Hintergrundfarbe (Einzug)
$nav_col_on   = "#FF0000"; // Farbmarkierung aktiv
$nav_col_off  = "#000000"; // Farbmarkierung passiv
//-----------------------------------------------------------------------------//
// 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);
// gegen Verlassen des Baumes schützen:
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),"&nbsp;&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>";
?>
Zuletzt geändert von Sven777b am Fr 27. Sep 2002, 14:06, insgesamt 1-mal geändert.
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
arillus
Beiträge: 23
Registriert: Mi 18. Sep 2002, 00:26
Kontaktdaten:

Fehler

Beitrag von arillus »

Hy!
ich bekomme immer folgenden Fehler, wenn ich deine Nav einsetzen will.

Code: Alles auswählen

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in /web/mp1/textilpflege/cms/front_textil/front_content.php(128) : eval()'d code on line 76
idcat ist bei mir 12 (laut +/- im setien baum)
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b »

idcat ist bei mir 12 (laut +/- im setien baum)
das kann nicht sein. die idcat für "haupt" sollte eine der niedrigsten Nummern sein. Wenn du mit Demos installiert hast, dann ist front_single der client 2 und damit idcat = 3

1 = haupt, front_frame
2 = service, front_frame
3 = haupt, front_single
4 = service, front_single

da hab ich bestimmt etwas unklar erklärt. Du musst direkt auf einen Link in der ersten Zeile gehen. Es bietet sich natürlich das + oder - an. Der Link für den startpunkt lautet bei mir z.b.
http://feg-borna.de/cms/contenido/main. ... [b]idcat=1[/b]&expidcat=1&expanded=1
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 »

anmerkung. Die Fehlermeldung bedeutet, dass sich das phpscript zu tode gelaufen hat. Und zwar kann das nur an einer einzigen Stelle passieren - wenn er die basis nicht findet - also den Punkt "haupt"
Probier mal einfach mit der 3 und mit der 1
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
arillus
Beiträge: 23
Registriert: Mi 18. Sep 2002, 00:26
Kontaktdaten:

be

Beitrag von arillus »

bei mir schaut dasso aus:

main.php?area=con&action=50&idcat=12&expidcat=12&expanded=1&contenido

habe mehrere Mandanten angelegt, das hier ist der dritte!!

meine struktur schaut so aus:


textilpflege testtempl
Start neu default
Home Hauptdesign
Über uns unkonfiguriert
Aktuelles unkonfiguriert
Service unkonfiguriert
Preise unkonfiguriert
Filialen unkonfiguriert
Links unkonfiguriert
Kontakt
ekke
Beiträge: 130
Registriert: Mi 18. Sep 2002, 18:26

Beitrag von ekke »

Hallo Sven,

sobald eine Kategorie auf visible ='0' steht, hängt sich das Skript auf, z.T. sogar bis zum Systemabsturz.

Wenn alle visible = '1' sind, läuft es wunderbar.

Mit error_reporting (E_ALL); im originalen front_content.php gibt er mir (neben vielen notice) aus:

Fatal error: Maximum execution time of 30 seconds exceeded in d:\www\contenido\front_single\front_content.php(128) : eval()'d code on line 57

also läuft sich das Skript tot.

Gruss ekke
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b »

Also wichtig für alle!! In der Navigation war ein Bug - Dieser ist jetzt weg
Die Navigation hatte sich totgelaufen, wenn eine Kategorie nicht auf visible stand.

Editiert 27.09.02 15:10

Sorry nochmal für den Fehler
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
arillus
Beiträge: 23
Registriert: Mi 18. Sep 2002, 00:26
Kontaktdaten:

Funkt nicht wie ich will

Beitrag von arillus »

Ich habe das Navmodul eingesetz, funkt aber nicht ganz so wie es soll, => Markierung funkt nicht!

hier der Code:

Code: Alles auswählen

<?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 = '12'; // Startbaum festlegen 
$nav_col_out  = "#FFFFFF"; // Zellfarbe normal 
$nav_col_over = "#6600FF"; // Zellfarbe Mouse-Over 
$nav_col_back = "#6600FF"; // Hintergrundfarbe (Einzug) 
$nav_col_on   = "#FF8000"; // Farbmarkierung aktiv 
$nav_col_off  = "#6600FF"; // Farbmarkierung passiv 
//-----------------------------------------------------------------------------// 
// 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); 
// gegen Verlassen des Baumes schützen: 
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=\"0\" 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),"  "); 
      echo "<span style='background-color:".$nav_col_back.";'>".implode("",$mod_space)."</span>"; 
      if($nr == $idcat){ echo "<span style='background-color:".$nav_col_on."; text-align:right'> </span>"; } 
      else { echo "<span style='background-color:".$nav_col_off."'> </span>"; }; 
      echo "<a href=\"".$con_tree[$nr][link]."\" id=\"left-menu\" onmouseover=\"status='".$con_tree[$nr][titel]."';return true;\">".$con_tree[$nr][titel]."</a></td></tr>"; 
   }; 
}; 
unset($nav_tree);unset($nav_path); 
echo "</table>"; 
?>
hier der link:
http://www.textilpflege.at/neu.html

bitte um hilfe!
Sven777b
Beiträge: 503
Registriert: Mi 18. Sep 2002, 00:00
Wohnort: Sachsen
Kontaktdaten:

Beitrag von Sven777b »

wenn die Markierung fehlt (und sehr wahrscheinlih auch die Einrückung) - dann sind wieder die &nbsp; verloren gegangen. in meinem anderen Posting habe ich das nochmal extra hervorgehoben. Es gibt 4 nbsp in folgenden Zeilen:

Code: Alles auswählen

$mod_space = array_pad($mod_space,($con_tree[$nr][level] - 1),"&nbsp;&nbsp;");

Code: Alles auswählen

if($nr == $idcat){ echo "<span style='background-color:".$nav_col_on."; text-align:right'>&nbsp;</span>"; }
else { echo "<span style='background-color:".$nav_col_off."'>&nbsp;</span>"; };
wenn du das Layout bearbeitest, werden die &nbsp; leider jedesmal wieder in normale Leerzeichen umgewandelt und die Markierung ist wieder wech. Also immer nach diesen 4 &nbsp; schauen.
Module zum anschauen:
bei Sven: http://contenido-module.de
bei Pulk : http://spielwiese.pulk.net

Der-Dirigent: http://der-dirigent.de
arillus
Beiträge: 23
Registriert: Mi 18. Sep 2002, 00:26
Kontaktdaten:

Danke

Beitrag von arillus »

Hab schon an mir gezweifelt!

jetzt funkts, Danke!
Björn
Beiträge: 276
Registriert: Di 17. Sep 2002, 18:25
Kontaktdaten:

Beitrag von Björn »

Sven hat ein überarbeitetes Menü mit detailierter Anleitung geschrieben. Dieses findet ihr hier:

http://www.contenido.de/forum/viewtopic.php?t=118

Damit es zu keinen Verwirrungen kommt, schließe ich dieses Topic.
Gesperrt