Probleme mit Dyn. Menue mit einem Sub - Level

M@rk

Mitglied
Hallo Leute,

ich habe hier ein Script eines dynamisches Menus gezogen und es auf meine Bedürfnisse soweit abgeändert. Geht soweit auch ganz gut.

Die Gestaltung sieht so aus, dass ich 2 verschiedene Grafiken als Buttons habe und per mouseover austausche. (nichts besonderes) Klicke ich nun auf einen Button nimmt er die Mouseover-Grafik an und das Sub-Menue geht auf. Das Problem is nun, dass wenn ich auf das Sub-Menue klicke, nimmt der Übergeordnete Button wieder die Grafik des "normalen" Buttons an. Er müsste praktisch auch wenn ich im Sub-Menue bin in der Mouseover-Grafik bleiben.


Hier ein Teil des Scripts:

PHP:
if($PHP_SELF == $menuStruct[0]['root']){
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }
    else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
  }
} else {
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
    foreach($value as $key2=>$value2){
      if(array_search($PHP_SELF,$value)){
        if($key2 != "root")
           if($PHP_SELF == $value2){
              echo "<div class=\"secLevelActive\"><a href=".$value2.">$key2</a></div>\n";
           }else{
              echo "<div class=\"secLevel\"><a href=".$value2.">$key2</a></div>\n";
           }
      }
    }
  }
}
?>

I chhoffe, dass ich es einigermaßen verständlich beschrieben habe. Da ich selber noch PHP Anfänger bin, tue ich mir recht schwer... :confused: Vielleicht kann mir ja jemmand helfen, wäre toll...


Gruß M@rk
 
Poste bitte den HTML-Quelltext, wie du ihn im Browser zu Gesicht bekommst.
PHP ist eine serverseitige Sprache und hat von daher nix mit dem zu tun, was sich im Browserfenster abspielt...es generiert nur den Code, welcher an den Browser gesendet wird.
 
Hi Sven ich denke mal, daß du damit nicht viel anfangen kannst...

HTML:
<div class="fstLevel"><a href=/unternehmen.php>Unternehmen</a></div>
<div class="fstLevel"><a href=/folienschriften.php>Folienschriften</a></div>
<div class="fstLevel"><a href=/offsetdruck.php>Offsetdruck</a></div>
<div class="fstLevel"><a href=/siebdruck.php>Siebdruck</a></div>
<div class="fstLevel"><a href=/textildruck.php>Textildruck</a></div>
<div class="fstLevel"><a href=/untereloxaldruck.php>Untereloxaldruck</a></div>
<div class="fstLevel"><a href=/gravuren.php>Gravuren</a></div>
<div class="fstLevel"><a href=/webdesign.php>Web-Design</a></div>
<div class="fstLevelActive"><a href=/allgemein.php>Allgemein</a></div>
<div class="secLevel"><a href=/faq.php>FAQ</a></div>
<div class="secLevel"><a href=/nochmehr.php>Noch mehr</a></div>


und hier nach anklicken des Sub-Menues...

HTML:
<div class="fstLevel"><a href=/unternehmen.php>Unternehmen</a></div>
<div class="fstLevel"><a href=/folienschriften.php>Folienschriften</a></div>
<div class="fstLevel"><a href=/offsetdruck.php>Offsetdruck</a></div>
<div class="fstLevel"><a href=/siebdruck.php>Siebdruck</a></div>
<div class="fstLevel"><a href=/textildruck.php>Textildruck</a></div>
<div class="fstLevel"><a href=/untereloxaldruck.php>Untereloxaldruck</a></div>
<div class="fstLevel"><a href=/gravuren.php>Gravuren</a></div>
<div class="fstLevel"><a href=/webdesign.php>Web-Design</a></div>
<div class="fstLevel"><a href=/allgemein.php>Allgemein</a></div>
<div class="secLevelActive"><a href=/faq.php>FAQ</a></div>
<div class="secLevel"><a href=/nochmehr.php>Noch mehr</a></div>

Gruß M@rk
 
Hi Sven klar...

hier der PHP Code, ich denke das css ist hier überflüssig:

PHP:
$siteRoot= substr_replace ($PHP_SELF, "",strrpos ($PHP_SELF, "/")+1);
$menuStruct=array(
"Startseite"=>array("root"=>$siteRoot."index.php"),
"Unternehmen"=>array("root"=>$siteRoot."unternehmen.php", "Chronik"=>$siteRoot."chronik.php", "Unternehmensziel"=>$siteRoot."unternehmensziel.php", "Anfahrtsskizze"=>"javascript:oeffnefenster('anfahrt_1.htm')"),
"Folienschriften"=>array("root"=>$siteRoot."folienschriften.php", "Schriften"=>$siteRoot."schriften.php", "Fahrzeuge"=>$siteRoot."fahrzeuge.php", "Schilder"=>$siteRoot."schilder_folienschrift.php", "Messestände"=>$siteRoot."messestaende.php", "Schablonen"=>$siteRoot."schablonen.php",),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Siebdruck"=>array("root"=>$siteRoot."siebdruck.php", "Aufkleber"=>$siteRoot."aufkleber.php", "Bauschilder"=>$siteRoot."bauschilder.php", "Hinweisschilder"=>$siteRoot."hinweisschilder.php"),
"Textildruck"=>array("root"=>$siteRoot."textildruck.php", "T-Shirts"=>$siteRoot."t_shirts.php", "Polos"=>$siteRoot."polos.php", "Sweater"=>$siteRoot."sweater.php"),
"Untereloxaldruck"=>array("root"=>$siteRoot."untereloxaldruck.php"),
"Gravuren"=>array("root"=>$siteRoot."gravuren.php"),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Web-Design"=>array("root"=>$siteRoot."webdesign.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php", "FAQ"=>$siteRoot."faq.php", "Noch mehr"=>$siteRoot."nochmehr.php")
);


Gruß M@rk
 
So sollte es gehen....
Code:
foreach($menuStruct as $key1 => $value1)
    {
        $in_array = array_search($_SERVER['PHP_SELF'], $menuStruct[$key1]);
        switch($in_array)
            {
                case FALSE:
                    echo '<div class="fstLevel"><a href="' . $menuStruct[$key1]['root']. '">' . $key1 . "</a></div>\n";
                        break;
                
                default:
                    foreach($menuStruct[$key1] as $key2 => $value2)
                        {
                            $strPrefix = ($key2 == 'root') ? 'fst' : 'sec';
                            $strSuffix = ($value2 == $_SERVER['PHP_SELF'] || $key2 == 'root') ? 'Active' : '';
                            $blnLnk    = ($value2 != $_SERVER['PHP_SELF']) ? 1 : 0; 
                            
                            echo '<div class="'.$strPrefix.'Level'.$strSuffix.'">';
                            echo ($blnLnk) ? '<a href="'.$value2.'">' : '';
                            echo ($key2 == 'root')? $key1 : $key2;
                            echo ($blnLnk) ? '</a>' : '';
                            echo "</div>\n";
                        }
            }
    }
...ich hab das mal noch dahingehend geändert, dass die aktuelle Seite im Menu nicht verlinkt ist, und die Submenupunkte garnicht erst ausgegeben werden, wenn man in einem "root"-Dokument ist....spart ein paar Bytes Traffic:-)
 
Hallo Sven,

vielen Dank für Deine Hilfe. Ich habs jetzt mal eingesetzt geht aber immer noch nicht so richtig. Ich muß jetzt mal schauen ob ich es voll hinbekomme ansonsten melde ich mich einfach nochmal. Jetzt ist es auf alle Fälle so, daß keine grafik im Hintergrund liegt...

Gruß und Dank


M@rk
 
Hi Sven,

nochmal kurz, das Script ist doch soweit richt geändert oder?


PHP:
$siteRoot= substr_replace ($PHP_SELF, "",strrpos ($PHP_SELF, "/")+1);
$menuStruct=array(
"Startseite"=>array("root"=>$siteRoot."index.php"),
"Unternehmen"=>array("root"=>$siteRoot."unternehmen.php", "Chronik"=>$siteRoot."chronik.php", "Unternehmensziel"=>$siteRoot."unternehmensziel.php", "Anfahrtsskizze"=>"javascript:oeffnefenster('anfahrt_1.htm')"),
"Folienschriften"=>array("root"=>$siteRoot."folienschriften.php", "Schriften"=>$siteRoot."schriften.php", "Fahrzeuge"=>$siteRoot."fahrzeuge.php", "Schilder"=>$siteRoot."schilder_folienschrift.php", "Messestände"=>$siteRoot."messestaende.php", "Schablonen"=>$siteRoot."schablonen.php",),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Siebdruck"=>array("root"=>$siteRoot."siebdruck.php", "Aufkleber"=>$siteRoot."aufkleber.php", "Bauschilder"=>$siteRoot."bauschilder.php", "Hinweisschilder"=>$siteRoot."hinweisschilder.php"),
"Textildruck"=>array("root"=>$siteRoot."textildruck.php", "T-Shirts"=>$siteRoot."t_shirts.php", "Polos"=>$siteRoot."polos.php", "Sweater"=>$siteRoot."sweater.php"),
"Untereloxaldruck"=>array("root"=>$siteRoot."untereloxaldruck.php"),
"Gravuren"=>array("root"=>$siteRoot."gravuren.php"),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Web-Design"=>array("root"=>$siteRoot."webdesign.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php", "FAQ"=>$siteRoot."faq.php", "Noch mehr"=>$siteRoot."nochmehr.php")
);


if($PHP_SELF == $menuStruct[0]['root']){
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }
    else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
  }
} else {

foreach($menuStruct as $key1 => $value1)
    {
        $in_array = array_search($_SERVER['PHP_SELF'], $menuStruct[$key1]);
        switch($in_array)
            {
                case FALSE:
                    echo '<div class="fstLevel"><a href="' . $menuStruct[$key1]['root']. '">' . $key1 . "</a></div>\n";
                        break;
                
                default:
                    foreach($menuStruct[$key1] as $key2 => $value2)
                        {
                            $strPrefix = ($key2 == 'root') ? 'fst' : 'sec';
                            $strSuffix = ($value2 == $_SERVER['PHP_SELF'] || $key2 == 'root') ? 'Active' : '';
                            $blnLnk    = ($value2 != $_SERVER['PHP_SELF']) ? 1 : 0; 
                            
                            echo '<div class="'.$strPrefix.'Level'.$strSuffix.'">';
                            echo ($blnLnk) ? '<a href="'.$value2.'">' : '';
                            echo ($key2 == 'root')? $key1 : $key2;
                            echo ($blnLnk) ? '</a>' : '';
                            echo "</div>\n";
                        }
            }
    }
}
 
Was die Grafiken und Buttons, von denen du mehrmals gesprochen hast, angeht, kann ich nix sagen.... die sind in aus deinem Code nicht ersichtlich.

die ganze Sache sollte jetzt so aussehen:
Code:
<?php 
$siteRoot= substr_replace ($_SERVER['PHP_SELF'], "",strrpos ($_SERVER['PHP_SELF'], "/")+1);
 
$menuStruct=array(
"Startseite"=>array("root"=>$siteRoot."index.php"),
"Unternehmen"=>array("root"=>$siteRoot."unternehmen.php", "Chronik"=>$siteRoot."chronik.php", "Unternehmensziel"=>$siteRoot."unternehmensziel.php", "Anfahrtsskizze"=>"javascript:oeffnefenster('anfahrt_1.htm')"),
"Folienschriften"=>array("root"=>$siteRoot."folienschriften.php", "Schriften"=>$siteRoot."schriften.php", "Fahrzeuge"=>$siteRoot."fahrzeuge.php", "Schilder"=>$siteRoot."schilder_folienschrift.php", "Messestände"=>$siteRoot."messestaende.php", "Schablonen"=>$siteRoot."schablonen.php",),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Siebdruck"=>array("root"=>$siteRoot."siebdruck.php", "Aufkleber"=>$siteRoot."aufkleber.php", "Bauschilder"=>$siteRoot."bauschilder.php", "Hinweisschilder"=>$siteRoot."hinweisschilder.php"),
"Textildruck"=>array("root"=>$siteRoot."textildruck.php", "T-Shirts"=>$siteRoot."t_shirts.php", "Polos"=>$siteRoot."polos.php", "Sweater"=>$siteRoot."sweater.php"),
"Untereloxaldruck"=>array("root"=>$siteRoot."untereloxaldruck.php"),
"Gravuren"=>array("root"=>$siteRoot."gravuren.php"),
"Offsetdruck"=>array("root"=>$siteRoot."offsetdruck.php", "Briefbögen"=>$siteRoot."briefboegen.php", "Visitenkarten"=>$siteRoot."visitenkarten.php", "Rechnungsblöcke"=>$siteRoot."rechnungsbloecke.php", "Werbe-Flyer"=>$siteRoot."werbeflyer.php"),
"Web-Design"=>array("root"=>$siteRoot."webdesign.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php", "FAQ"=>$siteRoot."faq.php", "Noch mehr"=>$siteRoot."nochmehr.php")
); 

foreach($menuStruct as $key1 => $value1)
    {
        $in_array = array_search($_SERVER['PHP_SELF'], $menuStruct[$key1]);
        switch($in_array)
            {
                case FALSE:
                    echo '<div class="fstLevel"><a href="' . $menuStruct[$key1]['root']. '">' . $key1 . "</a></div>\n";
                        break;
                
                default:
                    foreach($menuStruct[$key1] as $key2 => $value2)
                        {
                            $strPrefix = ($key2 == 'root') ? 'fst' : 'sec';
                            $strSuffix = ($value2 == $_SERVER['PHP_SELF'] || $key2 == 'root') ? 'Active' : '';
                            $blnLnk    = ($value2 != $_SERVER['PHP_SELF']) ? 1 : 0; 
                            
                            echo '<div class="'.$strPrefix.'Level'.$strSuffix.'">';
                            echo ($blnLnk) ? '<a href="'.$value2.'">' : '';
                            echo ($key2 == 'root')? $key1 : $key2;
                            echo ($blnLnk) ? '</a>' : '';
                            echo "</div>\n";
                        }
            }
    }
?>

PHP_SELF solltest du übrigens per $_SERVER['PHP_SELF'] ansprechen, wenn du willst, dass deine Skripte noch funktionieren, falls dein Hoster mal register_globals deaktiviert;)
 
Zurück