Links innerhalb einer Tabelle
Tina Schumacher
- html
Beispiel: Eine Tabelle mit zwei Spalten und einer Zeile. In der linken spalte soll ein link auf test.htm verweisen und in der rechten spalte soll dann test.htm nach drücken des links erscheinen. Wie geht das?
P.S.: keine iframes
Hallo Tina,
Beispiel: Eine Tabelle mit zwei Spalten und einer Zeile. In der linken spalte soll ein link auf test.htm verweisen und in der rechten spalte soll dann test.htm nach drücken des links erscheinen. Wie geht das?
P.S.: keine iframes
überhaupt nicht.
Viele Grüße,
Stefan
Beispiel: Eine Tabelle mit zwei Spalten und einer Zeile. In der linken spalte soll ein link auf test.htm verweisen und in der rechten spalte soll dann test.htm nach drücken des links erscheinen. Wie geht das?
P.S.: keine iframes
Hallo Tina
Geht mit PHP.
Du setzt deinen Link auf die Seite selbts, mit einer Variable.
<a href="<? echo $PHP_SELF?test=1; ?>">
Dort wo die Datei erscheinen soll (rechte Spalte) steht dann folgender Code:
<?
if ($test==1)
{
include("test.htm");
}
?>
Müsste eigentlich so gehen.
Salut
Christoph
Hallo Christoph,
Geht mit PHP.
Unfug, es ist nicht möglich. Tina hat ja gut erklärt, die test.htm
soll nach dem Drücken des Links in der rechten Spalte erscheinen
und nicht, dass eine neue Datei geladen werden soll.
Die Lösung müßte also clientseitig ablaufen und da kommt PHP auf
keinen Fall in Frage. HTML (Iframes) hat sie selbst ausgeschlossen,
vielleicht gibt es noch mehr oder weniger komplexe DHTML-Lösungen,
aber ob sowas wirklich sinnvoll ist, ich weiß nicht.
Viele Grüße,
Stefan
Hi Stefan
Unfug, es ist nicht möglich. Tina hat ja gut erklärt, die test.htm
soll nach dem Drücken des Links in der rechten Spalte erscheinen
und nicht, dass eine neue Datei geladen werden soll.
es wir die selbe Datei nochmal geladen das stimmt, nur das jetzt durch die Übergabe der Variabel die datei text.htm angezeigt wird, die Position ist beliebig.
Vorher ohne gelickt zu haben wird die Datei text.htm einfach nicht mitgeschickt.
Erst der click sorgt dafür das die Datei mit angezeigt wird.
Ich weiß nicht wo du das Problem siehst?
Denn clientseitig müsste mann die datei text.htm immer mitschicken, ob geklickt oder nicht.
Also ich finde die Lösung O.K.
aber ist nur meine bescheiden Meinung.
Die Lösung müßte also clientseitig ablaufen und da kommt PHP auf
keinen Fall in Frage. HTML (Iframes) hat sie selbst ausgeschlossen,
warum soll das unbedingt clientseitig ablaufen?
Salut,
Christoph
Hallo Christoph,
es wir die selbe Datei nochmal geladen das stimmt, nur das jetzt durch die Übergabe der Variabel die datei text.htm angezeigt wird, die Position ist beliebig.
eben und d.h., die Datei text.htm wird nicht innerhalb der Tabellen-
zelle angezeigt. Du lädst eine neue Datei, die eben den Inhalt der
text.htm enthält. Ganz nebenbei darf es keine vollständige Datei
sein, sonst hast Du z.Bsp. die ganzen html-, head- und body-Elemente
doppelt.
Vorher ohne gelickt zu haben wird die Datei text.htm einfach nicht mitgeschickt.
Erst der click sorgt dafür das die Datei mit angezeigt wird.
Ich weiß nicht wo du das Problem siehst?
Weil Deine Lösung die Aufgabenstellung nicht erfüllt. Es ging darum,
innerhalb einer Tabelle in einer bestimmten Tabellezelle eine neue
Seite anzuzeigen. Ohne Iframes ist diese Sache nicht realisierbar.
Stelle Dir einfach vor, die "große" Seite enthält ein vom Nuter
auszufüllendes Formular und er soll mit einem Klick immer weitere
Informationen über die auszufüllenden Felder in der rechten Tabellen-
zelle erhalten. Da ist es ein großer Unterschied, ob die Seite in
der Tabellenzelle geladen wird oder eine komplett neue Seite, die
den Inhalt der text.htm mit enthält.
warum soll das unbedingt clientseitig ablaufen?
weil es dem Browser völlig egal ist, was auf dem Server abläuft. Er
bekommt auch bei Deinem Beispiel nur eine HTML-Seite und die kann
ich auch statisch auf dem Server ablegen. Das Ergebnis wäre auch
dann, dass die Aufgabenstellung nicht erfüllt ist, weil nicht die
Seite text.htm in die Tabellenzelle geladen wird, sondern eine
komplett neue Seite (inkl. dem gewünschten Inhalt in der Tabellen-
zelle).
Wenn man Iframes ausschließt (warum eigentlich?) und eine Lösung
mit DHTML nicht in Frage kommt (vermutlich), dann kann man nur
eine komplett neue Seite an den Browser schicken, was nicht das
Problem wie gewünscht löst, aber anders geht es eben dann nicht.
Diese Seite kannst Du wieauchimmer auf dem Server erzeugen ;-)
Viele Grüße,
Stefan
Hallo Stefan
wenn du den Code die (If-schleife) an die Stelle setzt wo sie hin soll hier also zwischen <td>CODE</td> in der Ausgangsdatei.
dann passiert beim ersten Aufruf, wobei die Variable $test nicht existiert folgendes.
Die Seite mit der Tabelle wird aufgerufen mit dem Link und die Zelle mit dem CODE ist leer.
(Mann kann vor den CODE zur Sicherheit der Darstellung noch ein setzen)
Klickt mann nun auf diesen link wird genau die selbe Seite wieder aufgerufen die selbe Tabelle alles identisch.
Es ist auch keine neue Datei sondern genau dieselbe Datei.
Nur jetzt hat dies Datei den Parameter $test=1.
Dies hat zur Folge, daß in der Zelle der Tabelle die Datei text.htm reingeschrieben wird.
(Du hast recht das mann muss head und so weglassen)
im Prinzip hab ich so doch das Problem gelöst, oder?
ich kann auch anstatt
include ("text.htm");
den text direkt reinschreiben ohne explizit eine Datei zu verwenden.
Ich finde die Lösung mit include aber besser, da übersichtlicher.
Also ich mache so meine Navigationsmenüs, eine Datei die bei verschiedenen Parameter ($test=1 etc) verschieden zusätzliche Unterpunkte anzeigt oder nicht.
Aber ich denke wir reden vielleicht auch aneinader vorbei.
Salut,
Christoph
Hallo Christoph,
Aber ich denke wir reden vielleicht auch aneinader vorbei.
etwas schon ;-)
Mir geht es nicht darum, Deine serverseitige Lösung in Frage zu
stellen, ich will lediglich festhalten, dass das eigentliche Problem
so nicht wirklich gelöst wird.
Stelle Dir die Seite xyz.htm vor, die eine Tabellenzelle hat. Dort
hinein soll Seite text.htm geladen werden. Sowas ist ohne die Ver-
wendung von Iframes nicht möglich.
Was Du machst, ist das Laden einer komplett neue Seite, die in
der Tabellenzelle den Inhalt von text.htm (allerdings nur den In-
halt des body-Bereiches dieser Seite) enthält. Es mag sein, dass
es sich aufgrund der Verwendung von PHP wieder um die xyz.php
nur mit entsprechenden Parameter handelt, aber es ändert nix daran,
dass Du *nicht* die Seite text.htm in die Seite xyz.htm direkt ge-
laden hast.
Keine Ahnung, ob Du meine Ausführungen jetzt verstanden hast, viel-
leicht erkläre ich es auch einfach zu komisch ;-)
Screenshot der Seite xyz.htm:
_________________
| ___________ |
| | | |
| | abc | |
| |___________| |
|_________________|
Tja und das eigentliche Problem besteht nun darin, in den Bereich
abc eine andere Seite zu laden, *ohne* die komplette Seite (z.
Bsp. xyz.htm mit Parametern) neu zu laden, nur im Bereich abc
soll sich etwas ändern, alles drumherum soll absolut unangetastet
bleiben. Damit muß diese Änderung serverseitig erfolgen, in Frage
kämen HTML oder DHTML (JavaScript), bei HTML gibt es als Möglich-
keit nur Iframes, die wurden ja bereits ausgeschlossen. DHTML
könnte gehen, halte ich aber für groben Unfug ;-)
Wenn Du die kompletten Seiten austauschst oder neu lädst, dann ist
es vollkommen unerheblich, ob es sich dabei um eine weitere HTML-
Seite (eben mit dem Inhalt der text.htm in der gewünschten Zelle)
oder um eine mit einer serverseitigen Technologie erzeugten
Seite handelt, in beiden Fällen kommt nur HTML bei Browser an
und zwar nicht nur, wie gewünscht, für den Bereich abc.
Viele Grüße,
Stefan
Das geht mit einer Grafik. Du musst den Text dann eben als GIF abspeichern.
Lade in die Rechte Tabellenspalte am Anfang einfach ein leeres GIF. Das kann, muss aber niccht schon die passende Größe haben (damit die Tabelle nicht zusammenbricht).
Mit JavaScript kannst Du dann gemäß dem Beispiel von Stefan Münz (ändernde Buttons bei MouseOver) das Bild austauschen. Wenns gut gemacht ist, merkt der Betrachter nicht, dass es Grafiktext ist.
[da habe ich ihn noch genervt, weil ich in meinen Tabellen einen Fehler hatte, und dachte, dass er einen in seinem Script hätte *schäm*]
Vielleicht könnte man einer Textarea (readonly) auf diese Weise auch einen neuen Wert zuweisen. Ich probiere das gleich mal aus.
Melde mich wieder
Hallo Tina,
jetzt hatte ich Dir hier die Lösung reingeschreiben und bin auf die blöde Escapetaste gekommen. IBM-SAA steckt eben doch zu tief drin...
Also nochmal:
Verstecktes Frame (1Pixel) anlegen, Textdatei dort hineinladen, mit der onLoad-Methode und Javascript die Daten in die Tabellenzelle transportieren, so müsste es gehen. Probier ich aber auch noch aus.
Jetzt erstmal den Text von meinen Basteleien von heute. geht bisher leider nur bei Microsoft...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--
function wxlBgCol(id,farbe)
{
if (document.all)
document.all[id].style.backgroundColor=farbe;
else
if (document.getElementById)
document.getElementById(id).style.backgroundColor=farbe;
else
if (document.layers)
document.layers[id].bgColor=farbe;
}
function getText(id)
{
if (document.all)
alert(document.all[id].innerText);
else
if (document.getElementById)
alert(document.getElementById(id).innerText);
else
if (document.layers)
alert(document.layers[id]).innerText;
}
//-->
</script>
</head>
<body>
<Table border="1">
<tr>
<td ID="Zelle1_1">
Text der ersten Zelle
</td>
<td ID="Zelle1_2">
Text der zweiten Zelle
</td>
</tr>
<tr>
<td ID="Zelle2_1">
Text der dritten Zelle
</td>
<td ID="Zelle2_2">
Text der vierten Zelle
</td>
</tr>
</table>
<form action="">
<input type="button" value="Zelle 1" onClick="getText('Zelle1_1')">
<input type="button" value="Zelle 2" onClick="getText('Zelle1_2')">
<input type="button" value="Zelle 3" onClick="getText('Zelle2_1')">
<input type="button" value="Zelle 4" onClick="getText('Zelle2_2')">
<br>
<input type="button" value="Farbe 1" onClick="wxlBgCol('Zelle1_1','#ff0000')">
<input type="button" value="Farbe 2" onClick="wxlBgCol('Zelle1_1','#00ff00')">
<input type="button" value="Farbe 3" onClick="wxlBgCol('Zelle1_1','#0000ff')">
<input type="button" value="Farbe 4" onClick="wxlBgCol('Zelle1_1','#777777')">
</form>
</body>
</html>