Ich habe hier eine PHP-Seite und dabei ein kleines Problemchen:
Die Seite ist wie folgt aufgebaut (und funktioniert auch ganz gut):
Oben: Banner
darunter: mainnav
darunter Links: menu
rechts neben dem menu: contents (Hier wird der Inhalt angezeigt)
Im Menü sind einige Links, die ein neues Fenster öffnen sollen - das klappt (ist ja auch nicht schwer).
Bei zwei Links hätte ich nun gern, dass sich diese im "Content-Feld" öffnen und der Rest bleibt. Nur wie mache ich das?
Ich benutze Dreamweaver 8 und kann da als Ziele für die Links nur blank, parent, self und top angeben. Das funktioniert nicht, also werd ich wohl was direkt im Code eintragen müssen - wäre gut, wenn mir einer sagen könnte, was ...
UnoOC
PS: Ich gebe zu, ich hab nicht viel Ahnung von PHP, also bitte idotensicher erklären ...
Nethands /// Regeln beachten - Suchfunktion benutzen /// Bildblog.de - Schlagzeil-O-Mat
Neid ist die deutsche Form der Anerkennung „Ringlein sehn heut lieblich aus, morgen werden Fesseln draus.“ Clemens Brentano /// "Keine schöne Frau kann die Erwartungen, die wegen ihres Aussehens in sie gesetzt wurden, über einen annehmbaren Zeitraum hinweg rechtfertigen." Kurt Vonnegut /// "Emanzipation ist der Versuch, auch häßliche Frauen in die Gesellschaft zu integrieren." Charles Bukowski /// Geduld ist die Kunst, nur langsam wütend zu werden. /// ,,Zuerst schuf der liebe Gott den Mann, dann schuf er die Frau. Danach tat ihm der Mann leid, und er gab ihm Tabak." Mark Twain /// Wenn du tot bist, dann weißt du nicht, dass du tot bist. Es ist nur blöd für die Anderen. Genau so ist es, ... wenn du dumm bist.
Das hat nicht viel mit PHP zu tun. PHP generiert ja nur HTML-Code. Du könntest das Problem mit Frames lösen. Das ist allerdings nicht sehr gebräuchlich. Schon eher Gebräuchlich ist, das Design entweder in eine Datenbank oder in eine externe Datei zu schreiben, und daraus immer wieder zu laden, z.B. so (für externe Datei):
<?php include('head.php'); include('menu.php'); echo 'zusätzlicher Content, wie Artikel...'; include('footer.php'); ?>
Für große Webseiten, oder solche, die oft geändert werden müssen, ist das sicher nicht optimal. Hat aber bei meiner ersten kleinen Seite gut funktioniert. Viel besser und praktischer ist es natürlich, Datenbanken zu benutzen. Sobald das einmal läuft, ist es einfach nicht so wartungsaufwendig, und neue Artikel sind dann auch schneller hinzugefügt. Wenn ich dir mal eine kleine Vorlage schreiben soll, sag Bescheid.
@Madddi: Das ist ja aus softwaretechnischer Sicht grausam was Du da machst
Wenn in einer Datei der Tag aufgeht, muss er auf der gleichen Datei wieder zu gehen. An sonsten wird das bei komplexeren Anwendungen ziemlich schnell unübersichtlich.
Bei der Neugestaltung würde ich mich immer am MVC Pattern ausrichten und eine extra View gestalten, um eine andere Zusammenstellung der Elemente abzubilden. In diesem Fall könnte man dann sogar die gleiche View mit neuen Inhalten füllen.
Bei Deinem Problem UnoOC ist das etwas schwieriger, da Du nicht eindeutig geschrieben hast aus welchen HTML Bestandteilen die Seite nun besteht.
Auch wenn es aus verschiedenen bei Google nachzulesenden Gründen nicht so gut ist Frames zu verwenden, sieht es für mich jetzt so aus, als hättest Du es in dieser Seite so gelöst.
In diesem Fall kannst Du einfach als "target" den Frame Namen angeben. Also einfach statt "_blank", was bei Dir in Dreamweaver schon vordefiniert ist, den Namen des Frames eintragen. Das Feld sollte auch in Dreamweaver mit jedem beliebigen Freitext überschreibbar sein.
@Madddi: Das ist ja aus softwaretechnischer Sicht grausam was Du da machst
Wenn in einer Datei der Tag aufgeht, muss er auf der gleichen Datei wieder zu gehen. An sonsten wird das bei komplexeren Anwendungen ziemlich schnell unübersichtlich.
Jo, ich weiß das. Habe ja auch geschrieben, dass sich das System nur für sehr kleine Seiten eignet. Für Sachen, die über eine private Homepage hinausgehen, sollte man lieber direkt zu einem CMS grifen, oder sich selber so etwas bauen.
@ EoN: Frames nutzt die Seite keine - das würd ich (glaube ich) auch hinbekommen, wenn das so wäre. Daher funktioniert das leider nicht.
Die Seite befindet sich momentan auf nem lokalen PC, auch sind da schon diverse Interna drin, so dass ich die Seite nicht hochladen und schon gar nicht öffentlich zugänglich machen darf.
Ich hab inzwischen herausbekommen, dass das wohl ne Dreamweaver-Baukasten-Seite ist. Evtl kann ich das ja irgendwie hochladen, mal sehen ...
kannst du denn auch nicht den groben Quellcode hier posten?
Ohne deine internen Texte, gerne mit Blindtexten, aber so das man mal alle <Tags> und die Struktur sieht.
Aber warum "muss" die Navigation stehen bleiben?
Wenn es eine Seite werden soll, die auch SEO konform sein soll, würde ich von Frames abstand nehmen.
Es gibt auch Lösungen mit JavaScript oder sogar CSS.
Aber ob der Aufwand zum Nutzen steht?!
Ich hab das Einsatzgebiet der Seite noch nicht verstanden.
Also es soll quasi nur der Inhalt vom Browser nachgeladen werden, die Navigation aber stehen bleiben!?
Ja
Zitat:
Zitat von DonSchado
Da wäre die einfachste Lösung, wie EoN angesprochen hat, mit Frames zu arbeiten.
Nochmal: die Seite ist schon komplett fertig, alle Inhalte auch. Das sind alles fertige PHP-Seiten.
Es geht nur um die Öffnung der Links im gekennzeichneten Bereich. Der Aufbau ist adäquat dem von mir verlinkten Beispiel.
Von dem ganzen Frames definieren & Co. hab ich in etwa so viel Ahnung wie von dem Aufbau eines Kommunikationssatelliten. Ich weiß, das er existiert, aber das wars auch schon.
Zitat:
Zitat von DonSchado
Aber warum "muss" die Navigation stehen bleiben?
Das ist eine Festlegung und Vorgabe.
Zitat:
Zitat von DonSchado
Ich hab das Einsatzgebiet der Seite noch nicht verstanden.
Das Einsatzgebiet ist für die Problemlösung wichtig?
Ok, aus deiner Antwort schließe ich, dass es sich hier um was berufliches handelt.
Ich würde aber jetzt aus meiner Sicht einfach mal behaupten, das du so nicht drum rum kommst, entweder die Seite neu aufzubauen, oder eine komplexere Lösung drauf zusetzen.
Beides fällt für dich aber raus, so wie ich das verstanden habe.
PHP wird ja auf dem Server ausgeführt. Das generierte HTML wird dann an deinen Browser geschickt. Das heißt bei einem neuen Klick auf einen Link, geht das Spiel wieder von vorn los.
Eine dynamische Lösung, geht also nur wenn du im Client (Browser), über beispielweise JavaScript, im DOM einzelne Knoten ein und ausblendest, bzw. nachlädst.
OK ich habe mir Dein Beispiel mal angeschaut.
Einen Link direkt in einem DIV-Container zu öffnen ist nicht möglich, allerdings kannst Du das ganze mit PHP wie folgt umgehen:
Wenn Du auf einen Link klickst wird gleiche Seite mit einer GET/POST Variablen (je nach dem ob Du möchtest, dass der Benutzer sieht, dass er auf einer unterschiedlichen Seite ist) erneut geöffnet. In dieser Variablen wird vermerkt, welcher Text in der Mitte angezeigt werden soll.
Je nach dem wie Deine Variable gesetzt ist, lädst Du dann einen unterschiedlichen Text in den mittleren Div Container.
Das ganze könnte dann im Code ca so aussehen:
Code:
<?
$todo;
$ausgabe;
function setContent() {
switch ($todo) {
case LINK1:
$ausgabe = "TEXT DER BEI LINK1 ANGEZEIGT WERDEN SOLL";
break;
case LINK2:
$ausgabe = "TEXT DER BEI LINK2 ANGEZEIGT WERDEN SOLL";
break;
default:
$ausgabe = "TEXT DER BEI KEINEM GEKLICKTEM LINK ANGEZEIGT WERDEN SOLL";
break;
}
return $ausgabe;
}
if(isset($_GET['VARIABLENNAME']) $todo = $_GET['VARIABLENNAME'];
$ausgabe = setContent();
?>
<!-- Im Div Container dann an der entsprechenden Postition im Script: -->
<div>
<?=$ausgabe?>
</div>
Der Code ist jetzt von mir nicht getestet, sondern aus dem Stehgreif herunterprogrammiert. Er sollte aber so in der Art funktionieren.
Um die Seiten dann aufzurufen kannst Du dann z.B. einfach auf die "XYZ.php?todo=LINK1" Datei linken.
Die Adressierung -falls der neue Inhalt im iframe auftauchen soll- müßte, wenn ich es recht erinnere, über target beim Link oder ggf. per <base target=.. erfolgen können.
So ich geb mein Senf auch mal dazu un d klau mir einfach mal das Beispiel von EoN:
PHP-Code:
<? //array wo die Seiten mit dem Content drin sind $files[0] = "/linkcontainer/zur/html/bzw/php/dateien.php"; $files[1] = "/linkcontainer/zur/html/bzw/php/dateien.html"; //...
$ausgabe; $link;
function setContent() {
ob_start(); //echo/includes nicht ausgeben sondern in einen buffer laden include $files[$link]; $ausgabe = ob_get_contents(); //buffer in variable speichern ob_end_clean(); //buffer loeschen
return $ausgabe; }
if (isset($_GET['linkID'])) { $link = $_GET['linkID']; $ausgabe = setContent(); } else { $link = 0; //0 koennte die index Seite sein. $ausgabe = setContent(); }
?>
<!-- Im Div Container dann an der entsprechenden Postition im Script: -->
<div> <?=$ausgabe?> </div>
damit hast du den Content ausgelagert. Die links sollten dann so aussehen
<a href="/index.php?linkID=0">link zur seite 1</a>
Danke für die - wenn auch zu späte - Hilfe. zwischenzeitlich hat sich jemand Professionelles meinem Problem angenommen und es flugs und sehr preiswert (2 Flaschen Wein und die Telefonnummer einer Bekannten) gelöst.
Danke für die - wenn auch zu späte - Hilfe. zwischenzeitlich hat sich jemand Professionelles meinem Problem angenommen und es flugs und sehr preiswert (2 Flaschen Wein und die Telefonnummer einer Bekannten) gelöst.