x-plosiv: PHP Navigation - finde Lösung nicht

Hallo zusammen

Leider stehe ich seit Stunden auf dem Schlauch, so dass ich eure Hilfe benötige.

Ich habe eine einfach PHP Navigation zusammen gebastelt, doch leider funktioniert sie nicht wie gewünnscht.

Das Ziel wäre, dass die Navigation 2 Unterkategorien hat, welche nur angezeigt werden, wenn die entsprechende höher gelegene Kategorie angewählt wurde. Das ganze wollte ich ohne JS und Datenbank lösen. Das ganze funktioniert auch soweit, bis zur 1. Unterkategorie. Doch die 2. Unterkategorie, wird dann auch gleich angezeit, ob diese erste angezeigt werden sollte, wenn ich die 1. Unterkategorie anklicke. Ich hoffe Ihr verstehe was ich meine. Ansonsten könnt Ihr es unter diesimpsons.ch einmal ansehen (Shop->T-Shirts). Die Shirts z.B. Homer Simpsons, sollten erst angezeigt werden, nach dem Klick auf T-Shirts und nicht bereit nach dem Klick auf Shop.

Hier mein Code:

<?php  
	// Main menu items  
	$mainMenu['&nbsp;Startseite']      = 'index.php';  
	$mainMenu['&nbsp;Shop']      = 'fanartikel-merchandising-shop.php';	  
	$mainMenu['&nbsp;Homer Simpson']      = 'homer-jay-simpson.php';	  
	$mainMenu['&nbsp;Hinter den Kulissen']      = 'die-simpsons-hinter-den-kulissen.php';  
	$mainMenu['&nbsp;Videos & Clips']      = 'die-simpsons-videos.php';  
	$mainMenu['&nbsp;Kreative Fans']      = 'kreative-simpsons-fans.php';  
	  
	// Sub menu items  
	$subMenu['&nbsp;Shop']['- DVD & Blue Ray'] = 'the-simpsons-dvds-blueray.php';  
	$subMenu['&nbsp;Shop']['- T-Shirts'] = 'simpsons-t-shirts.php';  
	$subMenu['&nbsp;Kreative Fans']['Lego Simpsons Intro']      = 'lego-simpsons-intro.php';  
	$subMenu['&nbsp;Kreative Fans']['Erfundene Figuren']      = 'simpsons-kreationen.php';  
	$subMenu['&nbsp;Kreative Fans']['Intro in echt']      = 'simpsons-intro-von-menschen-gespielt.php';  
	$subMenu['&nbsp;Kreative Fans']['Simpsons Intro in 3D']      = 'simpsons-3d-intro.php';  
	$subMenu['&nbsp;Kreative Fans']['Spezial von Fox TV']      = 'die-simpsons-start-einmal-anders.php';  
	  
		// SubSub menu items  
	$subMenu2['&nbsp;Shop']['- T-Shirts']['Homer Simpson'] = 'homer-simpson-shirt.php';  
	$subMenu2['&nbsp;Shop']['- T-Shirts']['Men at work'] = 'homer-simpson-shirt-men-at-work.php';  
?>  
  
<?php  
echo "<div class='navi'><p>";  
class maxNavigation{  
  
   function showMenu(){  
      global $mainMenu,$subMenu,$subMenu2;  
  
      $actualPage = $_SERVER['PHP_SELF'];  
      $actualPath = $_SERVER['REQUEST_URI'];  
  
      $actualPageName = basename($actualPage);  
      //echo $page;  
	  //echo $_SERVER['REQUEST_URI'];  
  
      //echo "$actualPage <br/> $actualPath";  
      $actMenu = '';  
	  $actMenu2 = '';  
   	foreach ($mainMenu as $menu => $link) {  
		    if ($link == $actualPageName) $actMenu = $menu;		  
		    if (isset($subMenu[$menu])){  
		       foreach ($subMenu[$menu] as $menuSub => $linkSub) {  
 		   	     if ($linkSub == $actualPageName) $actMenu = $menu;		  
			   }  
		    }  
			if (isset($subMenu2[$menu]['- T-Shirts'])){  
		       foreach ($subMenu2[$menu]['- T-Shirts'] as $menuSub2 => $linkSub2) {  
 		   	     if ($linkSub2 == $actualPageName) $actMenu2 = $menu;  
					  
			   }  
		    }  
			  
	    }  
	  
	    // Now display the menu  
	    foreach ($mainMenu as $menu => $link) {  
	      $class = ' class="mainMenuLink" ';  
	      if ($actualPageName == $link) $class=' class="mainMenuLinkSelected" ';  
	  
		   echo '<a'.$class.'href="'.$link.'">'.$menu.'</a>';  
		  
		   if ( ($actMenu == $menu) && (isset($subMenu[$menu])) ){  
		       foreach ($subMenu[$menu] as $menuSub => $linkSub) {  
                 $class = ' class="subMenuLink" ';  
	              if ($actualPageName == $linkSub) $class=' class="subMenuLinkSelected" ';  
 		   	     echo '<a'.$class.'href="'.$linkSub.'">'.$menuSub.'</a>';				  
		       }  
			  
			  }  
			if ( ($menuSub == "- T-Shirts") && (isset($subMenu2[$menu]['- T-Shirts'])) ){  
		       foreach ($subMenu2[$menu]['- T-Shirts'] as $menuSub2 => $linkSub2) {  
                 $class = ' class="subMenuLink" ';  
	              if ($actualPageName == $linkSub2) $class=' class="subMenuLinkSelected" ';  
 		   	     echo '<a'.$class.'href="'.$linkSub2.'">'.$menuSub2.'</a>';		  
		    }  
			}  
	  }  
  
  
   }  
  
}  
  
$navi = new maxNavigation();  
$navi->showMenu();  
echo "</p></div>";  
?>

Ich hoffe es kann mir jemand helfen und den Knopf bei mir lösen. Vielen Dank für Eure Hilfe.

  1. Hallo

    Hier mein Code:

    <?php

    // der Code
    ?>

    
    >   
    > Ich hoffe es kann mir jemand helfen und den Knopf bei mir lösen. Vielen Dank für Eure Hilfe.  
      
    Für das, was im Browser geschieht, brauchen wir den Code, der im Browser ankommt. Dazu gehört der mit dem PHP-Code generierte HTML-Code und das zugehörige CSS. Der PHP-Code, den du hier zeigst, läuft auf dem Webserver. Er generiert den für den Browser gedachten Code, wird aber \*vom Browser selbst\* überhaupt nicht wahrgenommen.  
      
    Was sich anhand deiner oben stehenden Beschreibung vermuten lässt, ist, dass die CSS-Eigenschaften für das erste Submenü auch auf das zweite (im ersten Submenü liegende) Submenü angewandt werden. Klären lässt sich das aber erst, wenn der Code bekannt ist.  
      
    Tschö, Auge  
    
    -- 
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.  
    Terry Pratchett, "Wachen! Wachen!"  
      
    [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
    
    1. hallo auge

      danke. aber ich kann deinen aussagen nicht ganz folgen. das css hat nichts damit zu tun, wann welches menu eingebledet wird. den html code siehst du ja wenn du den quell text ansiehst. den link habe ich ja gepostet. dort findest natürlich auch das css file. damit du aber nicht lange suchen musst her der direkte link.

      http://www.diesimpsons.ch/die-simpsons.css

      vielen dank für deine hilfe

  2. Liebe(r) x-plosiv,

    Du hast ein Problem mit Deiner Navi? Das sehe ich, denn Deine Navi ist keine. Es handelt sich um eine Ansammlung von Textabsätzen. Eine Navi ist aber eine Link_liste_. Wie man eine solche sinnvoll erstellt, steht bei SELFHTML: <http://de.selfhtml.org/css/layouts/navigationsleisten.htm@title=CSS-basierte Navigationsleisten>

    Wenn der HTML-Code Deiner Seite strukturell dem Sinn seines Inhalts entspricht, dann kann man an Deinem Problem sinnvoll weiterarbeiten. Bis dahin: Fröhliches Umgestalten!

    PS: Dein PHP interessiert mich hier überhaupt nicht. Mich interessiert nur der HTML-Code, der im Browser ankommt.

    PPS:

    Ansonsten könnt Ihr es unter diesimpsons.ch einmal ansehen (Shop->T-Shirts).

    Warum postest Du nicht gleich den _direkten_ Link? z.B. so: diesimpsons.ch->Shop->T-Shirts

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix

      Danke für deine Ausführung. sorry wegen dem link.

      Leider versteht ihr mich nicht richtig wie mir scheint. Ich habe kein CSS Problem. Die Darstellung ist nicht das Problem. Das Problem ist, dass die T-Shirts auch angezeigt werden wenn ich auf Shop klicke. Diese sollen aber erst angezeigt werden wenn ich auf die Unterkategorie T-Shirts im Menu Shop klicke. Also es soll ein weiteres Submenu aufgehen.

      Das ganze wird mit meinem php Script erledigt und nicht mit CSS. CSS kann ja nicht meine Arrays verarbeiten. Also bitte schaut euch bitte meinen php Code an. Das CSS krieg ich dann schon hin. Und wenn auch der HTML Code noch Fehler hat, kein Problem, das werde ich dann noch korrigieren. Aber all dies hat nichts mit meinem Problem zu tun.

      Ich hoffe ihr habt jetzt verstanden, wo mein Problem liegt und könnt mir vielleicht doch noch weiterhelfen.

      Besten Dank im voraus.

      1. Liebe(r) x-plosiv,

        Leider versteht ihr mich nicht richtig wie mir scheint.

        oh, ich kann Dir versichern, dass sich das genau umgekehrt verhält!

        Wenn Du nicht einsehen willst, wie eine vernünftige _STRUKTUR_ aussieht, dann bleibt Deine Seite eben unstrukturiert. Da kümmern mich Deine Arrays wenig. Das Problem sitzt - wie so meistens - zwischen den Ohren.

        Ich habe kein CSS Problem.

        Das mag richtig sein - weiß ich nicht.

        Die Darstellung ist nicht das Problem.

        Stimmt exakt.

        Das Problem ist, dass die T-Shirts auch angezeigt werden wenn ich auf Shop klicke.

        Was soll denn stattdessen angezeigt werden? Das hast Du bisher verschwiegen, oder?

        Diese sollen aber erst angezeigt werden wenn ich auf die Unterkategorie T-Shirts im Menu Shop klicke.

        Tja, dann stimmt eben die Struktur nicht. Dein Shop kennt keine Hierarchie Deiner Seiten. Ändere das.

        Also es soll ein weiteres Submenu aufgehen.

        Ist das im Sinne des Besuchers? Erleichtert ihm das die Orientierung?

        Das ganze wird mit meinem php Script erledigt und nicht mit CSS.

        Schon klar. Bin ja nicht von gestern. ;-)

        CSS kann ja nicht meine Arrays verarbeiten.

        Was Du nicht sagst.

        Also bitte schaut euch bitte meinen php Code an.

        Der Himmel behüte! Diesen Salat schaust Du Dir bitteschön ganz alleine selbst an! Warum soll ich da durchblicken? Ich habe das ja nicht gemacht.

        Und wenn auch der HTML Code noch Fehler hat, kein Problem, das werde ich dann noch korrigieren.

        Der HTML-Code hat keine "Fehler", es mangelt ihm an Sinn (und deshalb an Struktur)! Aber das hast Du anscheinend noch nicht einsehen wollen. Probiere es weiter!

        Aber all dies hat nichts mit meinem Problem zu tun.

        Hier irrt der Meister. Erdenke Dir eine sinnvolle _STRUKTUR_ und Du wirst sehen, wie alles plötzlich an seinen Platz fällt.

        Ich hoffe ihr habt jetzt verstanden, wo mein Problem liegt und könnt mir vielleicht doch noch weiterhelfen.

        Hihihi, das habe ich längst... nur Du sträubst Dich noch ein Bisschen.

        Besten Dank im voraus.

        Bist Du nun ein x-plosiv_er_ oder eine x-plosiv_e_?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo Felix

          Erstmals Danke, dass du mir geantwortet hast, auch wenn es nicht ganz nett war. Ich weiss nicht warum du mich nicht verstehen willst, bzw. du mir nicht beim PHP helfen willst. Im Titel steht ganz klar, PHP nicht CSS. Mir ist auch klar, dass die Navigation nicht schön dargestellt wird zur Zeit. Das ist aber nicht das Problem. Das nehme ich dann in Angriff, wenn die Navigation so funktioniert wie ich mir das wünsche.

          Hier nochmals was angezeigt werden soll, anscheinend ist dir das noch nicht klar, mag wohl an meiner Erklärung liegen, sorry:

          Der Besucher kommt auf die Startseite uns sollte in der Navi folgendes sehen:

          Startseite
          Shop
          Homer Simpson
          Hinter den Kulissen
          Videos & Clips
          Kreative Fans

          Danach klickt er auf Shop und sollte folgendes in der Navi sehen:

          Startseite
          Shop

          • DVD & Blue Ray
          • T-Shirts
            Homer Simpson
            Hinter den Kulissen
            Videos & Clips
            Kreative Fans

          Dann klickt der Besucher auf T-Shirts, dann sollte die Auflistung wie folgt ergänzt werden:

          Startseite
          Shop

          • DVD & Blue Ray
          • T-Shirts
            -- Homer Simpson
            -- Men at work
            Homer Simpson
            Hinter den Kulissen
            Videos & Clips
            Kreative Fans

          Ich hoffe du verstehst jetzt was ich meine.

          Aktuell wird die Navi aber wie folgt angezeigt:
          Klickt der Besucher auf Shop, sieht er bereits die T-Shirts aufgelistet also:

          Startseite
          Shop

          • DVD & Blue Ray
          • T-Shirts
            -- Homer Simpson
            -- Men at work
            Homer Simpson
            Hinter den Kulissen
            Videos & Clips
            Kreative Fans

          statt

          Startseite
          Shop

          • DVD & Blue Ray
          • T-Shirts
            Homer Simpson
            Hinter den Kulissen
            Videos & Clips
            Kreative Fans

          Die Darstellung welche ich jetzt im Forum gewählt habe, ist nur der Einfachheit halber. Wie gesagt, das CSS ist nicht das Problem. Der Fehler liegt im PHP Script. Doch checke nicht warum, wie gesagt stehe ich da wohl auf dem Schlauch und mache einen Gedankenfehler.

          Ob diese Navi Struktur Sinn macht oder nicht, spielt auch überhaupt keine Rolle, Dennoch bin ich der festen Überzeugung, dass sie Sinn macht. Schliesslich sollte die Navi noch mit vielen weiteren Produkten gefüllt werden. Also macht es aus meiner Sicht sehr viel Sinn, wenn nicht bereits beim Klick auf Shop alle Produkte angezeigt werden, sondern nur die Unterkategorien. Aber wie gesagt, das müssen wir hier auch nicht diskutieren, ich möchte einfach nur Hilfe/Tipps zu meinem PHP Script.

          Du schreibst:
          Der Himmel behüte! Diesen Salat schaust Du Dir bitteschön ganz alleine selbst an! Warum soll ich da durchblicken? Ich habe das ja nicht gemacht.

          Kannst du denn überhaupt PHP? Falls ja, müsste es für dich ein leichtes sein, mein Script zu lesen. Es sind ja nur ein paar Zeilen und weiss gott nicht kompliziert geschrieben. Ich würde es ja gerne selber anschauen, finde ja aber den Fehler nicht, aus diesem Grund bat ich hier im Forum ja auch um Hilfe. In der Hoffnung es kann mir jemand helfen oder ein Tipp geben, wie ich es besser machen kann. Ich bin kein PHP Profi, möchte aber weiter dazu lernen, jeder fängt doch einmal an oder?

          Vielleicht überlegst du es dir ja nochmals uns schaust mein PHP Script trotzdem einmal an (oder auch gerne jemand anders). Besten Dank im voraus.

          Übrigens ich bin ein ER, oder hätte ich wenn ich eine SIE bin mehr Chancen auf eine Antwort ;-)

          Also schon einmal Danke für deine/eure Hilfe.

          1. Lieber x-plosiv,

            Erstmals Danke, dass du mir geantwortet hast, auch wenn es nicht ganz nett war.

            ich erlaube mir gerne einen etwas schärferen Ton, wenn sich jemand weigert einzusehen, dass er seine Gedankenwege ändern muss, um an anderer Stelle nach der Lösung seines Problems zu suchen. Warum glaubst Du, werfe ich Dir vor, dass der Kern des Problems im Fehlen von Struktur liegt? Meinst Du ich will Dich bloß ärgern? Das könnte mir nicht ferner liegen.

            Mein Hinweis auf Struktur liegt in meiner Erfahrung begründet. Und Dein Script zeigt, dass Deine "Struktur" eben keine ist. Du hast drei Arrays ($mainMenu, subMenu, subMenu2). Was die miteinander zu tun haben, wird aus ihnen selbst nicht klar. Vergleiche einmal folgendes:

            // erst einmal ohne Struktur:  
            $mainManu = array(  
                'a' => 'a.php',  
                'b' => 'b.php',  
                'c' => 'c.php'  
            );  
            $subMenu = array(  
                'a1' => 'a1.php',  
                'a2' => 'a2.php',  
                'c1' => 'c1.php'  
            );  
            $submenu2 = array(  
                'a2a' => 'a2a.php',  
                'a2b' => 'a2b.php',  
                'c1a' => 'c1a.php'  
            );  
              
            // und jetzt mit Struktur:  
            $navi = array(  
                'Home' => array(  
                    'url' => 'home.php'  
                ),  
                'Shop' => array(  
                    'url'     => 'shop.php',  
                    'submenu' => array(  
                        'T-Shirts' => array(  
                            'url'     => 't-shirts.php',  
                            'submenu' => array(  
                                'Homer Simpson' => array(  
                                    'url' => 'homer-t-shirt.php'  
                                ),  
                                'Men at Work'   => array(  
                                    'url' => 'men-at-work.php'  
                                )  
                            )  
                        ),  
                        'DVD & Blue Ray' => array(  
                            'url' => 'discs.php'  
                        )  
                    )  
                ),  
                'Simpsons Facts'  => array(  
                    'url' => 'simpsons.php'  
                ),  
                'Fanart' => array(  
                    'url'     => 'fanart.php',  
                    'submenu' => array(  
                        'Lego Simpsons Intro' => array(  
                            'url' => 'lego.php'  
                        ),  
                        'Erfundene Figuren' => array(  
                            'url' => 'erfunden.php'  
                        )  
                    )  
                )  
            );
            

            Soetwas nenne ich Struktur! Studiere sie, um zu sehen, wie sie "funzt". Dann kannst Du Deine PHP-Scripte entsprechend bauen.

            Ich weiss nicht warum du mich nicht verstehen willst, bzw. du mir nicht beim PHP helfen willst.

            Woher willst Du wissen, dass ich Dich weder verstehe, noch verstehen will??? Ich verstehe Dich sehr gut, und ich sehe, dass Du nicht verstehst, in welche Richtung ich Dich weisen will. Denn ebenso sehe ich, dass Du mit Deinen bisherigen Denkmustern scheitern musst. Aber das konnte ich Dir bisher nicht kommunizieren. Leider.

            Im Titel steht ganz klar, PHP nicht CSS.

            Es ist mir völlig egal, was im Titel steht. Wenn Deine Probleme sich nicht mit PHP (alleine) lösen lassen, dann muss ich eben von dem schreiben, das Dir weiterhilft. Wenn Dir schon mein Ansatz mit HTML nicht geholfen hat, Struktur in Dein Denken zu bringen, so gelingt es mir vielleicht etwas mit PHP. Aber das Hauptproblem bleibt: Du denkst noch nicht in Strukturen!

            Mir ist auch klar, dass die Navigation nicht schön dargestellt wird zur Zeit. Das ist aber nicht das Problem. Das nehme ich dann in Angriff, wenn die Navigation so funktioniert wie ich mir das wünsche.

            Ich habe betont, dass es mich überhaupt nicht interessiert, wie die Sache _aussieht_, sondern wie sie _strukturiert_ ist (nämlich bisher garnicht)! Aber anscheinend fällt es Dir noch schwer, meinen Gedanken (und vor allem ihrer Verschriftlichung) zu folgen.

            Hier nochmals was angezeigt werden soll, anscheinend ist dir das noch nicht klar, mag wohl an meiner Erklärung liegen, sorry:
            [...]
            Danach klickt er auf Shop und sollte folgendes in der Navi sehen:

            Da siehst man ganz toll, dass Deine Navi Dein Denken komplett ausfüllt, aber das, was zwischen Besucher und Webapplikation passiert, leider noch nicht. Hast Du Dir einmal überlegt, was der Besucher im Inhaltsbereich der "Shop"-Seite zu sehen bekommen soll? Deine Navi hin oder her. Wenn Du nicht weißt, was im Inhalt der "Shop"-Seite stehen soll, dann finde ich es schon fast eine annehmbare Notlösung, dass da das steht, was Du nicht willst, denn sonst stünde da überhaupt nichts. Und der Besucher wäre enttäuscht. Und das willst Du ja sicherlich am allerwenigsten, oder?

            Ich hoffe du verstehst jetzt was ich meine.

            Das war mir schon seit Deinem Eingangsposting klar. Hast Du inzwischen kapiert, was ich Dir sagen will...?

            Ob diese Navi Struktur Sinn macht oder nicht, spielt auch überhaupt keine Rolle, Dennoch bin ich der festen Überzeugung, dass sie Sinn macht.

            A propos "Sinn machen"... Es ist nicht die "Navi Struktur", sondern Deine Gedankenstruktur, die noch keinen Sinn hat. Sonst sähe sowohl die Array-Struktur, als auch ihre Abbildung in HTML völlig anders aus. Daher hatte ich auf den SELFHTML-Artikel zu Navigationsleisten verlinkt - weniger wegen der CSS-Spielereien, als vielmehr wegen der semantischen HTML-Struktur. Aber das hattest Du noch nicht erkannt...

            Schliesslich sollte die Navi noch mit vielen weiteren Produkten gefüllt werden. Also macht es aus meiner Sicht sehr viel Sinn, wenn nicht bereits beim Klick auf Shop alle Produkte angezeigt werden, sondern nur die Unterkategorien.

            Aha! Da kommt doch schon etwas. Also Unterkategorien sollen angezeigt werden. Aber bitte doch nicht nur in der Navi! Das "rechts im Bild" lässt Du doch nicht etwa leer, oder?

            Aber wie gesagt, das müssen wir hier auch nicht diskutieren, ich möchte einfach nur Hilfe/Tipps zu meinem PHP Script.

            Tja, Du weißt weder Dir zu helfen, noch die Dir gebotene Hilfe umzusetzen. Das ist schon eine ungünstige Ausgangslage. Das muss ich Dir zugestehen.

            Kannst du denn überhaupt PHP?

            Nun, Du kannst ja mal meine Website besuchen und Dich darüber informieren... Da gibt es auch ein klitzekleines Webshop-Script. Ganz für umme!

            Falls ja, müsste es für dich ein leichtes sein, mein Script zu lesen.

            Ich will es aber nicht. Ein Programm folgt der in ihm angelegten Struktur. Und genau die ist es, die ich Dir ankreide! Warum sollte ich also eine sinnfreie bzw. sogar kaputte Struktur "verbessern", wenn eine gänzliche Neuerstellung _mit_ _Sinn_ soviel besser wäre! Und wenn Du mein ständiges Nennen von "Struktur" begreifen könntest, dann wäre Dir auch sofort klar, warum ich Deinen bisherigen PHP-Code so gänzlich ablehne.

            Ich bin kein PHP Profi, möchte aber weiter dazu lernen, jeder fängt doch einmal an oder?

            Deshalb helfe ich Dir überhaupt. Eben weil Du dazulernen willst. Dann fange doch einmal mit den Gedanken zur inneren Struktur Deiner Seite und ihrer Abbildung in PHP-Logik und HTML-Semantik an!

            Übrigens ich bin ein ER, oder hätte ich wenn ich eine SIE bin mehr Chancen auf eine Antwort ;-)

            Hehe, nur mit Bild. ;-)

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)