PHP dynamischer Content
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
auslese
beginn
break
browser
code
dank
datei
ende
fehler
http
index
inhalt
machen
problem
stehen
stelle
switch
tag
test
url
-
Ich arbeite schon den ganzen Tag an einem Problem,
vorweg ich bin noch sehr neu auf dem Gebiet PHP,
Zu meinem Problem, ich möchte mir einen dynamischen Content generieren, dazu habe ich mir eine index.php geschrieben.
<?php switch($_GET['content']) { case "main": include('php/main.php'); break; case "blog": include('php/blog.php'); break; case "gallery": include('php/gallery.php'); break; case "guestbook": include('php/guestbook.php'); break; case "contact": include('php/contact.php'); break; default: include('php/main.php'); break; } ?>
Diese funktioniert auch soweit.
Nu das Problem...
<!-- Beginn Navbar --> <div id="navbar"> <div id="nav"> <a class="button01" href="index.php?content=blog"></a> <a class="button02" href="index.php?content=gallery"></a> <a class="button03" href="index.php?content=guestbook"></a> <a class="button04" href="index.php?content=contact"></a> </div> </div> <!-- Ende Navbar --> <!-- Beginn dynamischer Content --> <div id="content"> <?php include('content'); ?> </div> <!-- Ende dynamischer Content -->
Die Links funktionieren, nur wird anstatt es in dem Container darzustellen eine neue Seite geöffnet.
Mein Ansatz wäre, das "content" nicht mehr als eine Variable gesehen wird.
Und damit der Browser bzw. Server nicht weis was er "includen" soll.
(Nur wie Binde ich dann mein html Code an der Stelle sonst ein?)
Bin momentan völlig Planlos...
Gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
file_get_content() oder schlicht file()
$variable = implode(" ",file("template/address.html"));
Damit lädst du den Inhalt der address.html in ein Array, dessen Inhalte du mit implode verbindest. Nun hast du den Inhalt der Datei in der Variable und kannst diese ausgeben.
Alternativ kannst du auch
$variable = file_get_content("template/address.html")
nutzen.
Beitrag zuletzt geändert: 6.9.2010 22:33:30 von vertico -
Das mit dem includen musst du dir als Anfänger wie folgt dastellen: Das include liest alles aus, was in der Datei steht. Dann macht es ?> (also den PHP-Tag zu), schreibt dort all den Code, der in der Datei ist, hin und macht dann automatisch wieder <?php , also macht mit dem Script weiter. Ich denke, so sollte das ganz verständlich sein.
Wenn in der Datei PHP-Code steht, wird dieser ausgeführt. Ist in der Datei nur HTML-Code, dann wird das damit gemacht, was damit gemacht werden würde, wenn du einfach das anstelle von Include schreiben würdest:
ist das gleiche, wieinclude('Eine_Datei.html');
Also er wird an dieser Stelle ausgegeben, wie, wenn er direkt in der Datei stehen würde. Im Browser wird man demgegenüber keinen Unterschied bemerken, also da entsteht weder ein IFrame, noch eine andere Art von irgendwas, das mit einer ganz neuen Seite anfängt. Sieh' dir doch einfach mal den Quelltext an: Im Browser auf Ansicht, dann auf "Quelltext betrachten". Ich denke, dann wirst du es verstehen.?> <html> <head> </head> <body> <!-- Dein ganzer Seiteninhalt --> </body> </html> <?php
Beitrag zuletzt geändert: 6.9.2010 22:32:48 von drafed-map -
Was include machen soll verstehe ich soweit,
nur das prob was ich habe es tut es nicht.
Normalerweise hätte im Quelltext ja ein html code stehen müssen (beim dyn Content)
Doch an der Stelle interpretiert er was flasches, bzw. weiß nicht was er in den dyn Content schreiben soll.
@vertigo
Wenn ich die variable in der index.php deklariere, kann ich sie dann in meinem index.html dann auslesen? -
cube1983 schrieb:
Wenn sich in der index.html PHP-Code befindet, der das kann (HTML kann das ja nicht), und die index.html von der index.php includet wird, nachdem die Variable, von der du sprichst, einen Wert bekommen hat, dann ja.
Wenn ich die variable in der index.php deklariere, kann ich sie dann in meinem index.html dann auslesen?
Kannst du mir bitte den Link zu der Problemseite schicken, dann würde ich mir das ganze mal ansehen. -
INDEX.php:
<?php switch($_GET['content']) { default: case "main": $content = file_get_content('php/main.php'); break; case "blog": $content = file_get_content('php/blog.php'); break; case "gallery": $content = file_get_content('php/gallery.php'); break; case "guestbook": $content = file_get_content('php/guestbook.php'); break; case "contact": $content = file_get_content('php/contact.php'); break; default: $content = file_get_content('php/main.php'); break; } ?> <!-- Beginn Navbar --> <div id="navbar"> <div id="nav"> <a class="button01" href="index.php?content=blog"></a> <a class="button02" href="index.php?content=gallery"></a> <a class="button03" href="index.php?content=guestbook"></a> <a class="button04" href="index.php?content=contact"></a> </div> </div> <!-- Ende Navbar --> <!-- Beginn dynamischer Content --> <div id="content"> <?php echo $content; ?> </div> <!-- Ende dynamischer Content -->
So könnte der Code umformuliert werden. So sollte im standartfall Main geladen werden oder wenn $_GET['content'] vorhanden ist die entsprechende Site. Wichtig ist, dass die geladenen Dateien nun kein eigenes html-Gerüst brauchen. Das bringt deine Index.php mit. In diesem Beispiel fehlt das Gerüst natürlich noch, ich habe nur deine Schnipsel genommen.
Beitrag zuletzt geändert: 6.9.2010 23:31:20 von vertico -
Die Seite ist noch nicht Online.
Teste sie local...
Kann aber den Kompletten Quelltext online stellen... (morgen, da Rechner aus)
@vertico
werde es morgen dann nochmal so umschreiben...
muss wohl eben nen fehler gehabt haben... (weil es nicht gefunzt hatte)
wie gesagt heute wird das eh nix mehr^^ (kopp is zu)
danke an euch beiden für die schnelle und gute hilfe
Beitrag zuletzt geändert: 6.9.2010 23:36:47 von cube1983 -
Hi.
Vielleicht hilft dir auch folgendes:
<?php $name = sprintf('./%s.htm', $_GET['seite']); if(file_exists($name)) { include "$name"; } else { include "home.htm"; } ?>
In $name wird - sofern aufgerufen - "./test.htm" gespeichert, file_exists() prüft dann, ob eine Datei "test.htm" existiert und wenn dem so ist, dann wird dieses includet, andernfalls wird "home.htm" eingefügt.
$_GET['seite'] entspricht demnach deinem Seitenaufruf.
Wenn deine Links z.B. so aussehen
dann muss da natürlich $_GET['url'] stehen.<a href="?url=test">Test</a>
Du kannst natürlich auch auf "test.html" oder "test.php" prüfen - einfach im Codebeispiel anpassen. Hast du verschiedene Dateiendungen (z.B. *.php und *.htm), dann kannst du beide mit einer weiteren if-Anweisung berücksichtigen:
In diesem Fall wird erst geschaut, ob "test.htm" existiert und ist dem nicht so, wird auf "test.php" geprüft. Trifft beides nicht zu, dann wird halt wieder "home.htm" includet.<?php $name = sprintf('./%s.htm', $_GET['seite']); if(file_exists($name)) { include "$name"; } else { $name = sprintf('./%s.php', $_GET['seite']); if(file_exists($name)) { include "$name"; } else { include "home.htm"; } ?>
Das ganze schreibst du in deine index-Seite an die Stelle, an dem der Content stehen soll. Den Inhalt wie gehabt in die jeweiligen Dateien (test.htm, test2.htm, o.ä.).
So sparst du dir switch
Ich hoffe es hilft, bei Fragen: Tu dir keinen Zwang an
Beitrag zuletzt geändert: 6.9.2010 23:58:27 von djglycerin -
@djglycerin: Also mal ganz ehrlich, wenn einem die Dateistruktur bekannt ist, braucht man nicht extra prüfen ob eine Datei die man includen will, auch existiert, das ergibt sich meist von alleine.
@cube1983: Lass am besten mal den Schmarrn mit dem switch(). Wir nur unnötig unübersichtlich und am Ende weißt Du selber nicht mehr Was genau für Was steht. Schau Dir mal mein Frameset Tutorial auf beStrange.de an, das sollte Dir helfen genau das zu erreichen, was Du im Moment versuchst. -
Ok...
Das Outsourcen hat geklappt...
Danke nochmals an alle...
Das Tut von strange hat sehr geholfen meinen Fehler zu entdecken...
Ich hätte von Anfang an die index.php in meine index.html includen müssen....
Gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage