Frank Porst: Javascript in PHP: dynamische Tabellenausgabe

Hallo,

Für Meldungen habe ich die Ausgabe der immer gleichen Tabellengerüste in eine eigene Datei ausgelagert, nur die einzelnen Inhalte variieren:

+------+-------------+
|Status|Kurze Meldung|
+------+-------------+
|Ausführliche Meldung|
+--------------------+

In PHP sieht die obig skizzierte Tabelle (vereinfacht) so aus:

echo '<table border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td>
            <table border="0" cellpadding="0" cellspacing="0">
              <div id="Breite_festlegen">
                <tr>
                  <td ...>Status</td>
                  <td ...>Kurze Meldung</td>
                </tr>
              </div>
              <tr>
                <td colspan="3">Ausführliche Meldung</td>
              </tr>
            </table>
          </td>
        </tr>
      </table>';

Nun stehe ich vor dem Problem, dass ich u.U. auch längere Texte ausgebe, die dann die gesamte Tabelle in die Breite strecken, was sehr unschön aussieht.

Mein Vorhaben geht in die Richtung, dass die Zelle, die die ausführliche Meldung beeinhaltet, genau so breit ist der Div-Bereich, in dem der Status und die kurze Meldung ausgegeben werden.

Mein Ansatz sieht folgendermassen aus:

echo '<table border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td>
            <table border="0" cellpadding="0" cellspacing="0">
              <div id="Breite_festlegen">
                <tr>
                  <td ...>Status</td>
                  <td ...>Kurze Meldung</td>
                </tr>
              </div>
              <tr>
                <script language="javascript" type="text/javascript"
                  <!--
                    document.write ('<td colspan="3" width="' +
                    document.all.Breite_festlegen.offsetWidth + '">
                    Ausführliche Meldung</td>');
                  //-->
                </script>
              </tr>
            </table>
          </td>
        </tr>
      </table>';

Leider funktioniert die Bildschirmausgabe hier nicht wie beabsichtigt. Wenn ich mir den Quelltext ansehe, dann ist der Javascript-Code, samt dem anzuzeigenden Text einzusehen.

Liegt das Problem u.U. in einer falschen Maskierung ?
Wenn nicht, was habe ich falsch gemacht ?

Vielen Dank für Eure Antworten.

Gruss, Enrico

  1. Hallo!
                                                                           v

    <script language="javascript" type="text/javascript"
                      <!--
                        document.write ('<td colspan="3" width="' +
                        document.all.Breite_festlegen.offsetWidth + '">
                        Ausführliche Meldung</td>');
                      //-->
                    </script>

    Hier fehlt was (v).
    Beste Grüße
    Viennamade

  2. Hallo Enrico alias Frank,

    Beseitige zunächst die gröbsten Fehler:

    <div> direkt in <table> ist nicht erlaubt.

    echo '<table border="0" cellpadding="0" cellspacing="0">
            <tr>
              <td>
                <table border="0" cellpadding="0" cellspacing="0">
                  <div id="Breite_festlegen">

    [...]

    dieses <div> hat hier nichts verloren.

    echo '<table border="0" cellpadding="0" cellspacing="0">
            <tr>
              <td>
                <table border="0" cellpadding="0" cellspacing="0">
                  <div id="Breite_festlegen">

    hier immer noch nicht...

    Leider funktioniert die Bildschirmausgabe hier nicht wie beabsichtigt. Wenn ich mir den Quelltext ansehe, dann ist der Javascript-Code, samt dem anzuzeigenden Text einzusehen.

    Danach sehen wir weiter...

    Freundliche Grüsse,

    Vinzenz

    PS: Stelle die Tabelleneigenschaften, die das Aussehen betreffen, ebenfalls über CSS ein.

  3. Hallo Enrico,

    zusätzlich zu dem falsch positioniertem DIV und dem fehlenden ">" hat Deine Tabelle in der ersten Zeile zwei TDs, in der zweiten Zeile steht aber colspan=3!

    Mit CSS kannst Du die Breite von Tabellen (und anderen Elementen) festlegen, interessant könnte für Dich die Einheit "em" sein.

    Gruß, Jürgen