Tina Schumacher: Links innerhalb einer Tabelle

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

  1. 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

  2. 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

    1. 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

      1. 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

        1. 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

          1. 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

            1. 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

  3. 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

  4. 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>