Newbie: Seiteninhalt mit Hilfe von include ändern?

Hi,
ich bin soeben dabei meine neue Homepage zu erstellen und um spätere Wartungsarbeiten unproblematischer durchzuführen, würde ich gerne nur eine Hauptseite haben und mit Hilfe der Navigation (habe ich bereits auf der linken Seite) nur immer den Text auf der Seite abändern, doch wie macht man das? Mir ist klar, dass ich wohl include und die switch-Anweisung verwenden muss, doch wie weise ich einem Link eine bestimmte include-Datei zu (bestimmt über GET oder POST, doch wie)?
Über Hilfe würde ich mir sehr freuen :)

Mit freundlichen Grüßen,
Newbie

  1. Om nah hoo pez nyeetz, Newbie!

    zum Auslagern des Quelltextes schau in die FAQ. Mein Favorit sind die [ref:self812;servercgi/server/ssi.htm@title=SSI]. Wenn du nicht möchtest, dass die Seite shtml heißt, musst du in der [ref:self812;servercgi/server/htaccess.htm@title=.htaccess] entsprechende Angaben machen.

    Matthias

    --
    http://www.billiger-im-urlaub.de/kreis_sw.gif
    1. zum Auslagern des Quelltextes schau in die FAQ. Mein Favorit sind die http://de.selfhtml.org/servercgi/server/ssi.htm@title=SSI. Wenn du nicht möchtest, dass die Seite shtml heißt, musst du in der http://de.selfhtml.org/servercgi/server/htaccess.htm@title=.htaccess entsprechende Angaben machen.

      Und warum sollte man SSI bemühen, wenn man ohnehin schon den PHP-Interpreter bemüht?

    2. Om nah hoo pez nyeetz, Newbie!

      zum Auslagern des Quelltextes schau in die FAQ. Mein Favorit sind die http://de.selfhtml.org/servercgi/server/ssi.htm@title=SSI. Wenn du nicht möchtest, dass die Seite shtml heißt, musst du in der http://de.selfhtml.org/servercgi/server/htaccess.htm@title=.htaccess entsprechende Angaben machen.

      Matthias

      Hi Matthias,
      mir geht es aber überhaupt nicht ums Auslagern, sondern wie ich den Text (den ich includen möchte) mit einem Button abändern kann ohne, dass eben die ganze Seite neulädt ;)
      Mfg,
      Newbie

      1. mir geht es aber überhaupt nicht ums Auslagern, sondern wie ich den Text (den ich includen möchte) mit einem Button abändern kann ohne, dass eben die ganze Seite neulädt ;)

        Sag das doch gleich.

        Das ist mit PHP nicht möglich, wohlaber mit Ajax.

  2. Mir ist klar, dass ich wohl include und die switch-Anweisung verwenden muss, doch wie weise ich einem Link eine bestimmte include-Datei zu (bestimmt über GET oder POST, doch wie)?

    Am einfachsten vermutlich so, also die verzweigung aufgrund eines bestimmten Wertes in einer GET-Variable.

    Ist zwar nicht skalierbar, aber bei einer einzelnen Seite zweckerfüllend.

    switch ($_GET['foo']) {  
      case 'news':  
        readfile('news');  
        break;  
      case 'press':  
        readfile('press');  
        break;  
      default:  
        readfile('home');  
        break;  
    }
    

    Wenn du nur statischen Text einbinden willst, der nicht durch den PHP-Interpreter muss, ist readfile() die bessere Alternative zu include()

    include($_GET['foo']); ist eine skalierbare Möglichkeit, aber uu. gefährlich - denk nichtmal dran das so einzusetzen ;).

    1. Mir ist klar, dass ich wohl include und die switch-Anweisung verwenden muss, doch wie weise ich einem Link eine bestimmte include-Datei zu (bestimmt über GET oder POST, doch wie)?

      Am einfachsten vermutlich so, also die verzweigung aufgrund eines bestimmten Wertes in einer GET-Variable.

      Ist zwar nicht skalierbar, aber bei einer einzelnen Seite zweckerfüllend.

      switch ($_GET['foo']) {

      case 'news':
          readfile('news');
          break;
        case 'press':
          readfile('press');
          break;
        default:
          readfile('home');
          break;
      }

      
      >   
      > Wenn du nur statischen Text einbinden willst, der nicht durch den PHP-Interpreter muss, ist readfile() die bessere Alternative zu include()  
      >   
      > `include($_GET['foo']);`{:.language-php} ist eine skalierbare Möglichkeit, aber uu. gefährlich - denk nichtmal dran das so einzusetzen ;).  
        
        
      Genau hier liegt leider mein Problem, denn diese Lösung hatte ich bereits über Google gefunden...doch wie weise ich jetzt einem Button/Link den Wert für die GET-Variable zu, so dass sich der Text entsprechend ändert? Kann mir vllt. mal jemand einen kleinen, den oberen Quellcode ergänzenden, Code schreiben (am besten wäre es, wenn jmd das ganze mit einem Beispielslink machen könnte)?  
        
      Mfg,  
      Newbie
      
      1. example.com/index.php?foo=value

        1. Vielleicht ist es ja besser wenn ich euch mal meinen Quellcode zeige ^^

          index.php

            
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
          <html>  
          <head>  
          		<title>Meine Homepage</title>  
          		<meta name="description" content="">  
          		<link rel="stylesheet" type="text/css" href="css/stylesheet.css">  
          		<link rel="php" type="script/php" href="php/externe_daten.php">  
          </head>  
          <body>  
          <div id="gesamt">  
          	<div id="ueberschriften">Meine Homepage</div>  
          	<div id="body2">  
          		<?php  
          		include('switch.php');  
          		?>  
          	</div>  
          	<div id="nav">  
          		<ul>  
          			<li><a href="?content=home"><div class="textInNavi">Home</div></a></li>  
          			<li><a href="?content=gaestebuch"><div class="textInNavi">Gästebuch</div></a></li>  
          			<li><a href="?content=impressum"><div class="textInNavi">Impressum</div></a></li>  
          		</ul>  
          	</div>  
          </div>  
          </body>  
          </html>  
          
          

          switch.php

            
          <?php  
            
          switch($_GET['get'])  
          {  
            
          case 'home':  
            
          include('startseite.php');  
          break;  
            
          case 'gaestebuch':  
            
          include('gaestebuch.php');  
          break;  
            
          case 'impressum':  
            
          include('impressum.php');  
          break;  
            
          default:  
            
          include('startseite.php');  
          break;  
          }  
          ?>  
          
          

          Eigentlich müsste es doch so funktionieren, oder?

          Mit freundlichen Grüßen,
          Newbie

          1. Eigentlich müsste es doch so funktionieren, oder?

            Soweit ich das beurteilen kann, ja.

            Wenn du also switch.php?content=home aufrufst, bekommst du nur das, was sich im Inhalt ändert?

            Und das gilt es, per XMLHttpRequest zu holen und in die Seite einzubauen.

            Das ist aber eine Sache für JavaScript.

            1. Eigentlich müsste es doch so funktionieren, oder?

              Soweit ich das beurteilen kann, ja.

              Wenn du also switch.php?content=home aufrufst, bekommst du nur das, was sich im Inhalt ändert?

              Und das gilt es, per XMLHttpRequest zu holen und in die Seite einzubauen.

              Das ist aber eine Sache für JavaScript.

              Kannst du mir vllt. ein kleines Beispielscript mit Javascript schreiben, welches eben in Verbindung mit meinem Quellcode den Text entsprechend ändert? Wollte jetzt eigentlich nicht noch eine Programmiersprache erlernen, nur um das mit dem Text hinzubekommen -.-

              Mfg,
              Newbie

              1. Wollte jetzt eigentlich nicht noch eine Programmiersprache erlernen, nur um das mit dem Text hinzubekommen -.-

                Ein Framework wie jQuery dürfte dich interessierne, dann musst du dich nicht mit Details beschäftigen.

                Mit .bind() und .load() dürfe die Sache rudimentär in mit maximal 10 Zeilen erledigt sein, das bekommst du sicher selbst hin.

                1. Ein Framework zu verwenden ohne zu wissen was im Hintergrund passiert, und das vor allem bei Ajax ist meiner Meinung nach net so gut.
                  Ein bisschen Hintergrundwissen sollte man schon haben, sonst tut man sich auch mit dem Framework schwer.

            2. Wenn du also switch.php?content=home aufrufst, bekommst du nur das, was sich im Inhalt ändert?

              Ja wenn ich switch.php?content=home aufrufe kommt der Inhalt von startseite.php (habe ich ja in switch.php entsprechend geschrieben), doch wenn ich beispielsweise auf switch.php?content=gaestebuch wechsel, kommt auch startseite.php ?!

              1. Ja wenn ich switch.php?content=home aufrufe kommt der Inhalt von startseite.php (habe ich ja in switch.php entsprechend geschrieben), doch wenn ich beispielsweise auf switch.php?content=gaestebuch wechsel, kommt auch startseite.php ?!

                In deinem Beispiel prüft die switch-Verzweigung aber $_GET['get'] nicht content ;)

                Das ist das erste Problem, was es zu lösen gilt.

                1. In deinem Beispiel prüft die switch-Verzweigung aber $_GET['get'] nicht content ;)

                  Das ist das erste Problem, was es zu lösen gilt.

                  also einfach switch($content)?

                  1. Das ist das erste Problem, was es zu lösen gilt.

                    also einfach switch($content)?

                    $_GET['content'], nicht $content - register_globals sind etwas "out" ;)

                    1. $_GET['content'], nicht $content - register_globals sind etwas "out" ;)

                      Ah ok danke, jetzt wechseln die Seiten schon richtig, doch leider öffnet das z.b. gaestebuch.php direkt und includet es nicht :(

                      1. Ah ok danke, jetzt wechseln die Seiten schon richtig, doch leider öffnet das z.b. gaestebuch.php direkt und includet es nicht :(

                        Hast du jetzt in den Links index.php?content=foo oder switch.php?content=foo stehen?

                        1. Hast du jetzt in den Links index.php?content=foo oder switch.php?content=foo stehen?

                          <li><a href="switch.php?content=home"><div class="textInNavi">Home</div></a></li>

                          1. Hast du jetzt in den Links index.php?content=foo oder switch.php?content=foo stehen?

                            <li><a href="switch.php?content=home"><div class="textInNavi">Home</div></a></li>

                            Da soll natürlich der Richtige Link stehen, also index.php sodass die Seite ganz normal funktioniert.

                            switch.php rufst du nur per JavaScript direkt auf, wenn du NUR den Inhalt brauchst, der sich ändern soll.

                            Dazu liest du einfach das href-Attribut aus und ersetzt dort index.php durch switch.php.

                            1. Da soll natürlich der Richtige Link stehen, also index.php sodass die Seite ganz normal funktioniert.

                              switch.php rufst du nur per JavaScript direkt auf, wenn du NUR den Inhalt brauchst, der sich ändern soll.

                              Dazu liest du einfach das href-Attribut aus und ersetzt dort index.php durch switch.php.

                              Also um das nochmal klar zustellen (bin mir nicht sicher, ob du das jetzt richtig verstanden hast...): Ich möchte NUR den Inhalt includen, aber wenn ich mit JS die index.php durch switch.php ersetze, dann kann ich mir das ja irgendwie sparen und gleich <a href="switch.php"> schreiben?! o.O

                              1. Also um das nochmal klar zustellen (bin mir nicht sicher, ob du das jetzt richtig verstanden hast...): Ich möchte NUR den Inhalt includen, aber wenn ich mit JS die index.php durch switch.php ersetze, dann kann ich mir das ja irgendwie sparen und gleich <a href="switch.php"> schreiben?! o.O

                                Ich denke du hast die Grundprinzipien noch nicht verstanden, darum reden wir hier etwas aneinander vorbei.

                                Ich umreisse die Theorie nochmal schnell und bitte dich darum, dass du dich selbst mit der Thematik beschäftigst, um es zu verstehen.

                                Du baust eine ganz hundsgewöhnliche Seite bei der in irgend einer Form per serverseitiger Technik Inhalte zusammengestückelt werden können - sprich Teile (also die Inhalte bestimmter Bereiche) sehen in Abhängigkeit bestimmter Parameter einfach anders aus.

                                Jetzt kommt JavaScript ins Spiel, dieses soll ohne die Seite neu laden zu müssen bestimmte Teile ersetzen.

                                Du selbst weißt, dass bei index.php?content=home und index.php?content=news der Unterschied darin besteht, dass der Inhalt von des div-Elements mit der ID body2 ein anderer ist.

                                Wenn du nur den neuen Inhalt haben willst, der sich ändert, musst du also anstatt index.php?content=home einfach switch.php?content=home aufrufen.

                                Du kannst aber nicht einfach die Links im Frontend ändern, da sonst natürlich unvollständige Dokumente daherkommen.

                                Darum passiert folgendes im JavaScript:

                                Bei einem Klick auf einen Link mit dem Ziel index.php?content=home nimmst du diese Zeichenkette und ersetzt "index.php" durch "switch.php"

                                switch.php?content=home wird mittels XMLHttpRequest aufgerufen und erhält als Antwort ein unvollständiges Dokument von dem du aber weißt, wo es in das bereits vorhandene Dokument eingebaut gehört.

                                Der erste Teil mit PHP funktioniert augescheinlich schon, darum fehlt dir jetzt noch der JavaScript teil der Zusätzlich dazu kommt.

                                1. Bei einem Klick auf einen Link mit dem Ziel index.php?content=home nimmst du diese Zeichenkette und ersetzt "index.php" durch "switch.php"

                                  Sry, aber ich versteh das mit dem XMLHttpRequest leider noch nicht :(
                                  Ich habe folgendes bereits probiert, doch es gibt mir nie die URL aus :/

                                    
                                  <script type="text/javascript">  
                                  	url=new XMLHttpRequest();  
                                  	document.write(url);  
                                  </script>  
                                  
                                  

                                  Auf der Seite, auf der ich das mit document.write schreibe, steht dann immer "[object XMLHttpRequest]", aber da sollte doch eigentlich dann die URL stehen, damit ich diese ja ersetzten kann???
                                  Ich weiß schon was du meinst und wie es gehört, doch wenn mir dieses XMLHttpRequest keinen vernünftigen Wert ausgibt, dann kann ich ja schlecht "index.php" durch "switch.php" ersetzen?!
                                  Mit freundlichen Grüßen,
                                  Newbie

                                  1. Also ich habe jetzt ein kleines Javascript geschrieben, das "index" durch "switch" ersetzt:

                                      
                                    	<script type="text/javascript">  
                                    	var url = window.location.href;  
                                    	document.write(url.replace("index", "switch"));  
                                    	</script>  
                                    
                                    

                                    das ganze habe ich zu der funktion ersetzen() gemacht und bei den Links mit Hilfe von OnClick eingebunden, wenn ich jetzt auf Gästebuch drücke, dann erscheint auch die Seite Gästebuch, doch wenn ich auf Home drück erscheint auch Gästebuch?!

                                    1. Problem gelöst :D
                                      Da war noch ein falscher Link in der Navigation... ^^
                                      Jetzt funktioniert alles, beim Klick auf den Link lädt nur der Inhalt :)

                                      Mit freundlichen Grüßen und einen schönen Abend noch,
                                      Newbie

                          2. Hallo,

                            <li><a href="switch.php?content=home"><div class="textInNavi">Home</div></a></li>

                            das ist ungültiges HTML - ein Blockelement wie div darf kein Kind von a sein.

                            So long,
                             Martin

                            --
                            Realität ist eine Illusion, die durch Unterversorgung des Körpers mit Alkohol entstehen kann.
                            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(