Tabellenhöhe durch Skript ändern

Tribalman

Erfahrenes Mitglied
Hallo zusammen.

Ich habe dieses Thema schon im PHP-Forum diskutiert,
wer den Beitrag lesen möchte: hier ist der Link

Es geht um folgendes: Ich lese mittels PHP Datensätze
(Texte) aus einer Datenbank aus und füge diese in eine
Tabelle ein. Die Tabellenhöhe ist dabei zunächt flexibel
und ergibt sich je nach Inhalt.

Da ich mit einem Raster arbeite sollen die Tabellen aber
bestimmte Höhen haben und zwar immer vielfache von 27 (pixeln).

Hier sind mal zwei Bilder wie es mit "falscher" und "richtiger"
Höhe aussieht (Die Linien zwischen den Texten sollen auf
gleicher Höhe mit den Linien zwischen den Links sein!)

falsch
richtig


Ich habe rausgefunden, dass man mit Hilfe von Javascript
die Höhe der flexiblen Tabelle auslesen und ändern kann.
Ich habe das anhand einer Testseite ausprobiert und hin-
bekommen. In Verbindung mit PHP schaffe ich das nicht.

Jetzt brauche ich eure Hilfe.

Hier ist mal der Quelltext zu der Testseite. Die aktuelle
Höhe der Tabelle mit der ID "Tabelle 1" wird ausgelesen
und auf den nächsten Vielfachen von 27 gebracht.

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>test</title>
</head>

<body>

<table border="1" cellpadding="0" cellspacing="0" width="200" id="tabelle1">
<tr>
  <td valign="top">
    blabla<br>
	bla<br>
	blabla
  </td>
</tr>
</table>

<script type="text/javascript">
<!--
höhe = document.getElementById("tabelle1").offsetHeight;
faktor = höhe / 27;
zahl = Math.ceil(faktor);
neuehöhe = zahl * 27;
document.getElementById("tabelle1").style['height'] = neuehöhe;
//-->
</script>

</body>
</html>

Das selbe müsste jetzt auf meiner eigentlichen Seite eingefügt
werden. Den Quellcode dazu findet ihr hier:

HTML:
<table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0" style="padding:0px;">
    <tr height="100%">
      <td width="216" valign="top"><? include("navi.inc"); ?></td>
      <td width="432" valign="top">
	    <?
        $link = mysql_connect("localhost","root","") or die ("Keine Verbindung moeglich");
        mysql_select_db("gevd") or die ("Die Datenbank existiert nicht");
	    $abfrage = "SELECT head,body FROM aktuell";
	    $ergebnis = mysql_query($abfrage);
		$i = 0;
	    while($row = mysql_fetch_object($ergebnis))
  	    {
		$i++;
  	    echo "
        <table border=\"0\" width=\"432\" cellpadding=\"0\" cellspacing=\"0\" style=\"padding:0px;\" id=\"tabelle",$i,"\">
	    <tr height=\"9\">
	      <td colspan=\"2\"><img src=\"bilder/linie_mittel.gif\" width=\"405\" height=\"9\" border=\"0\"></td>
          <td></td>
          <td></td>
        </tr>
        <tr>
          <td width=\"18\" valign=\"top\"><img src=\"bilder/quadrat.gif\" width=\"18\" height=\"13\" border=\"0\"></td>
          <td width=\"405\" valign=\"top\"><b>",$row->head,"</b><br><br>",$row->body,"</td>
	      <td width=\"27\"><br></td>
        </tr>
	    </table>";
  	    }
		mysql_free_result($ergebnis);
		mysql_close($link);
	    ?>
	  </td>
    </tr>
    </table>

Ich hoffe ihr könnt mir helfen!

Stefan
 
Zuletzt bearbeitet:
Mmmmh, was genau hindert dich jetzt genau daran, den Skriptcode Seite A in Seite B zu kopieren und dort der Tabelle eine ID zu verpassen?
 
Ja, das hab ich ja probiert, aber entweder bekomme
ich eine Fehlermeldung oder es passiert garnichts.

Die Tabellen bekommen ja durch die while-schleife
alle eine id verpasst. Also "tabelle1", "tabelle2" und
so weiter. Ich glaube übrigens, dass der Code nicht
ganz richtig ist – müssen nicht alle Anführungszeichen
maskiert werden?

Code:
id=\"tabelle",$i,"\"

Das Script soll alle Tabellen abklappern und deren
Höhen ändern. Aber wie bekommt das Script raus,
wieviele Tabellen es gibt? Kann ich die Zählvariable
aus PHP an Javascript übergeben ?

Muss das Script in die while-schleife oder dahinter?

Ich bin jetzt gerade nicht zu Hause und kann daher
nicht daran arbeiten. Werde es heute Abend vielleicht
nochmal probieren.

Vielleicht kann einer von euch mal posten wie das
Script seiner Meinung nach eingefügt werden müsste ...

Stefan
 
Hi,

ist die korrekte Syntax, um Strings zu verbinden, nicht der Punkt?
Code:
id=\"tabelle".$i."\"
Zu den Tabellenhöhen:
Du könntest per getElementsByTagName alle Tabellen im Dokument ermitteln. Anschliessend
durchläufst Du alle Tabellen und prüfst, ob die aktuelle ID die Zeichenfolge "tabelle" enthält. Ist
das der Fall, handelt es sich um eine Tabelle, die angepasst werden muss und die entsprechende
Höhe wird gesetzt.

Ich habe Dein Script angepasst und in eine Funktion gepackt (Umlaute in JavaScript sind
im Übrigen nicht erlaubt).
Code:
<script type="text/javascript">
<!--
function resizeTables(){
    // Alle Tabellen im Dokument ermitteln
    var arrTables = document.getElementsByTagName("table");

    // Alle Tabellen durchlaufen
    for(var i=0; i<arrTables.length; i++){
        // Falls die Zeichenfolge "tabelle" in der ID vorkommt
        if(arrTables[i].id.search(/tabelle.+/i) != -1){
            // Integerwert der Höhe auslesen
            hoehe = parseInt(arrTables[i].offsetHeight);
            // Skalierungsfaktor ermitteln
            faktor = hoehe / 27;
            // Faktor nach oben runden
            zahl = Math.ceil(faktor);
            // Neue Höhe berechnen
            neuehoehe = zahl * 27;
            // Neue Höhe der Tabelle zuweisen (Mozillas benötigen Zusatz "px")
            arrTables[i].style.height = neuehoehe + "px";
        }
    }
}
//-->
</script>
Das Script solltest Du im Header platzieren. Aufrufen kannst Du es im onload-Event des Bodys.
HTML:
<body onload="resizeTables();">
Ciao
Quaese
 
Wow!

Es klappt! :)

Vielen Dank für deine Hilfe. Da kann man
mal wieder sehen, dass man fast alles hin-
bekommen kann, wenn man nicht gleich
aufgibt – und kompetente Hilfe hat ;)

Eine Kleinigkeit noch: durch die nachträgliche
Änderung der Tabellenhöhen kann man jetzt
natürlich sehen wie das Bild angepasst wird.
Ich hab bloß ein 56K Modem – vielleicht liegt
es daran. Aber ich frage mich ob das schneller
wäre, wenn man die Änderung der Tabellen
direkt bei der Datenbankabfrage macht ...

Ist nur eine Kleingkeit, aber je weniger man
von dieser Höhenänderung mitbekommt desto
besser.

Vielen Dank nochmal,

Stefan
 

Neue Beiträge

Zurück