Ich sage gleich vorweg wieder, dass man sich vorher sein Layout und die front_content sichern sollte – falls etwas schief geht – oder nicht so klappt, wie es sollte.
Ersteinmal die front_content.php editieren:
Der alte Code für die Hauptnavigation enthielt einige SQL-Abfragen, die nunmehr unnötig geworden sind – daher werden sie entfernt und durch die beiden neuen ersetzt:
Suche:
Code: Alles auswählen
$sql = "SELECT A.idcat, 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' AND level='0' ORDER BY idtree";
$db->query($sql);
$i=1;
while ($db->next_record())
{$sql = "SELECT parentid, A.idcat, 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' AND B.parentid='".$db->f("idcat")."' ORDER BY A.idtree";
$db2 = new DB_Contenido;
$db2->query($sql);
$j=1;
while ($db2->next_record())
{if ($db->f("visible") == "1" & $db2->f("visible") == "1")
{if ($db->f("public") == "1" & $db2->f("public") == "1" | $auth->auth["uid"] != "nobody")
{$tree["".$i.""]["".$j.""][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&parent=".$db2->f("parentid")."&subid=".$db2->f("idcat")."&idcat=".$db2->f("idcat")."");
$tree["".$i.""]["".$j.""][idcat] = $db2->f("idcat");
$tree["".$i.""]["".$j.""][name] = $db2->f("name");
if ($tree[$i][$j][idcat] == $subid)
{$sql = "SELECT parentid, A.idcat, 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' AND B.parentid='".$db2->f("idcat")."' ORDER BY A.idtree";
$db3 = new DB_Contenido;
$db3->query($sql);
$k=1;
while ($db3->next_record())
{if ($db3->f("visible") == "1")
{if ($db3->f("public") == "1" | $auth->auth["uid"] != "nobody")
{$tree["".$i.""]["".$j.""]["".$k.""][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&parent=".$db3->f("parentid")."&subid=$subid&idcat=".$db3->f("idcat")."");
$tree["".$i.""]["".$j.""]["".$k.""][idcat] = $db3->f("idcat");
$tree["".$i.""]["".$j.""]["".$k.""][name] = $db3->f("name");
$k++;}}}}
$j++;}}}
$i++;}
Code: Alles auswählen
// --------------------------------------------------------------------- //
// 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");}
};
// Seiten einlesen //
$sql = "SELECT A.idcat, A.idside, A.is_start, B.title, B.summary, C.public FROM $cfgTab_cat_side AS A, $cfgTab_side_lang AS B, $cfgTab_cat_lang AS C, $cfgTab_cat AS D WHERE A.idside=B.idside AND A.idcat=C.idcat AND C.idcat=D.idcat AND A.online='1' AND C.visible='1' AND D.idclient='$client'";
$db->query($sql);
while($db->next_record()){
$con_side[$db->f("idcat")][$db->f("idside")][idcat] = $db->f("idcat");
$con_side[$db->f("idcat")][$db->f("idside")][idside] = $db->f("idside");
$con_side[$db->f("idcat")][$db->f("idside")][is_start] = $db->f("is_start");
$con_side[$db->f("idcat")][$db->f("idside")][titel] = $db->f("title");
$con_side[$db->f("idcat")][$db->f("idside")][summary] = $db->f("summary");
$con_side[$db->f("idcat")][$db->f("idside")][public] = $db->f("public");
$con_side[$db->f("idcat")][$db->f("idside")][link] = $sess->url("front_content.php?client=".$client."&lang=".$lang."&idcat=".$db->f("idcat")."&idside=".$db->f("idside")."");
};
// --------------------------------------------------------------------- //
Hinweise für Entwickler kommen später...
Nun zum Layout
wer die Demos verwendet, der hat im Demo-Layout auch eine feste Navigation. Diese ist eingerahmt durch:
<!-- begin main-navigation-->
<!-- end main-navigation-->
da zwischen kommt die neue Navigation ... ansonsten halt einfach dorthin, wo sie am besten passt.
die hauptnavigation sieht so aus:
Code: Alles auswählen
<!-- BEGIN MAIN_NAVIGATION -->
<?php
//-----------------------------------------------------------------------------//
$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 -->
$nav_start = '3';
hier wird der Startpunkt festgelegt. Eigentlich ist das nicht der Startpunkt... es geht darum, dass man ja auch den Baum "Service" hat. Und wenn man dort hin klickt, kann es passieren, dass die Navigation ab sofort die Service-Punkte anzeigt. Um das zu verhindern, wird überprüft, ob die aktuelle Seite eine Unterseite dieser Startkategorie ist.
Wie finde ich raus, welchen Startpunkt ich habe?
- Normalerweise sind die Startpunkte so verteilt: home client1 = 1 ; service client1 = 2 ; home client2 = 3 ; service client2 = 4
also ist der Startpunkt meist die 3
- wenn es nicht geht, wirds wohl ein anderer Punkt sein - also:
-- im backend auf "Content" -> "Struktur" gehen.
-- Hinter dem Punkt "home" mit der maus über den Link "umbenennen" fahren.
-- in der Statuszeile unten kann man den Link sehen. Da steht irgendwo z.b. idcat=3 <- diese Nummer ist der Startpunkt.
$nav_col_out = "#6699FF";
Die Zeilenfarbe für einen normalen Menüpunkt.
$nav_col_over = "#9999FF";
Die Zeilenfarbe, wenn man mit der Maus darüber fährt.
$nav_col_back = "#6600FF";
Ein kleiner Trick... hier sollte die Farbe des Hintergrundes eingetragen werden. Dadurch wird das Einrücken simuliert. Der erste Teil der Zeile wird einfach in dieser Farbe dargestellt.
$nav_col_on = "#FF0000";
Die Farbe des Markierers vor einem normalen Menüpunkt
$nav_col_off = "#000000";
Die Farbe des Markierers vor dem aktuellen Menüpunkt
F.A.Q
Die Unterpunkte sind nicht mehr eingerückt und die Markierung fehlt
-dann wird wohl wieder das in ein normales Leerzeichen umgewandelt worden sein. Das passiert jedesmal, wenn man das Layout ändert. Also immer gleich die Leerzeichen drch ersetzen. Es sind insgesamt 4 Stück in der Navigation verteilt.
Es erscheint überhaupt keine Navigation
- entweder stimmt der Startpunkt nicht
- oder die Änderung in der front_content.php wurden nicht vorgenommen
Jetzt werden die Service-Punkte nicht mehr angezeigt
- das ist richtig... durch die Änderung in der front_content.php geht die <!--Second Navigation--> nicht mehr. Stattdessen kann man aber einen Container dort einbinden und das normale Navigations-Modul benutzen. Die Navigation wie folgt konfigurieren:
* Gruppen
* den Baum "Service" markieren.
Alternativ kann man auch ein festes Servicemenü bauen... das kann so aussehen:
Code: Alles auswählen
<!-- BEGIN SECOND_NAVIGATION -->
<?php
//-----------------------------------------------------------------------------//
$baum = '4';
$font_normal = "font11";
$font_aktiv = "font3";
// Baum sortieren //
for($nr = 0; $nr <= $con_tree_max; $nr++){
if($con_tree[$nr][parent] == $baum && $con_tree[$nr][preid] == '0'){$tmp_found=1;break;}
}
unset($nav_tree);$nav_tree = array(); $i = -1;
do{
array_push($nav_tree , $nr);
$nr = $con_tree[$nr][postid];
$i++;
} while($nr != '0' && $tmp_found==1 && $i <= $con_tree_max);
// Baum ausgeben //
foreach($nav_tree as $nr){
if(($con_tree[$nr][public] == '1' or $auth->auth["uid"] != "nobody") and $con_tree[$nr][visible] == '1'){
echo "<a href=\"".$con_tree[$nr][link]."\" id=\"";
if($nr == $idcat){ echo $font_aktiv; } else { echo $font_normal; };
echo "\">".$con_tree[$nr][titel]."</a> ";
if($con_tree[$nr][postid] != 0){ echo "| "; };
};
};
unset($nav_tree);
?>
<!-- END SECOND_NAVIGATION -->
Durch die Änderung in der front_content.php werden einige neue Variablen zur Verfügung gestellt und alte sind verschwunden.
Die Variable $tree ist jetzt weg!
Stattdessen folgendes:
$con_tree[?] enthält jede Kategorie (auch versteckte und geschützte) der Reihe nach in Abhängigkeit zu ihrer idcat.
- also $con_tree[1] enthält vermutlich alle Info´s zum Menüpunkt "haupt" des Client 1
- es werden nur die Punkte des aktuellen Clienten und der aktuellen Sprache eingelesen.
$con_tree[?][parent] - die übergeordnete Kategorie (vorige Ebene)
$con_tree[?][preid] - die vorangehende Seite in dieser Ebene (sortierung) (wenn 0 - dann ist es die erste)
$con_tree[?][postid] - die nachfolgende Seite in dieser Ebene (Sortierung) (wenn 0 - dann ist es die letzte)
$con_tree[?][titel] - der Name dieser Kategorie
$con_tree[?][public] - ist 1 wenn die Kategorie öffentlich ist und 0 wenn sie geschützt ist.
$con_tree[?][visible]- ist 1 wenn die Seite online ist und 0 wenn die Seite offline ist.
$con_tree[?][level] - enthält die Nummer der Ebene (Ebene 0 ist haupt und service)
$con_tree[?][link] - enthält den Link zur Startseite dieser Kategorie
$con_tree_max enthält die höchste idcat. Kann zur Sicherheit in loops eingebaut werden um zu verhindern, dass sich das Script tot läuft. Einfach von 0 - $con_tree_max zählen lassen - wird der Wert überschritten, ist es sinnlos weiter zu suchen.
$con_side[?][??] enthält jede Seite in Abhängigkeit zu ihrer idcat und idside. Der erste Wert ist idcat und der 2. ist idside. Somit kann man schnell alle unterseiten einer kategorie auflisten. Es sind nämlich bei idcat=1 z.b. $con_side[1][?].
Es werden nur die Seiten des aktuellen Clients und der aktuellen Sprache eingelesen, die online sind und deren Kategorie sichtbar ist.
$con_side[?][??][idcat] - enthält die aktuelle idcat.
$con_side[?][??][idside] - enthält die aktuelle idside.
$con_side[?][??][is_start] - ist 1 wenn die Seite eine Startseite ist - sonst 0
$con_side[?][??][titel] - der Titel der aktuellen Seite
$con_side[?][??][summary] - die zusammenfassung der aktuellen Seite
$con_side[?][??][public] - ist 1 wenn die übergeordnete Kategorie öffentlich ist. Sonst 0
$con_side[?][??][link] - ist der Link zu dieser Seite.
so... das wars erstmal - ich hoffe, alle klarheiten sind beseitigt