mysqldumper
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 02.02.2008, 16:58   #1
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht

Tabellenkopf bei langen Tabellen fixieren


Hallo TPler,

bei allen Projekten, in denen man viele Daten in tabellarischer Form auflistet, taucht immer wieder das Problem auf,
dass man die Tabellenüberschriften bei sehr großen Tabellen nach dem Scrollen nicht mehr sieht. Sind zusätzlich auch
horizontal viele Daten vorhanden, so dass man horizontal scrollen muss, so verliert man die Übersicht nur allzu leicht.
Wünschenswert wäre also eine Möglichkeit die Spaltenbezeichnungen zu fixieren, so dass man stets den Überblick behält.

Hier ist mein Ansatz, um das umzusetzen. Das Script kopiert die Spaltenüberschriften aus dem Tabellenkopf dynamisch
in ein am Seitenende fixiertes DIV. Das funktioniert wie folgt:
- der Kopfbereich der Tabelle muss semantisch korrekt mittels thead-Angabe notiert werden
- für den Zugriff darauf muss der thead-Bereich mit der ID "mythead" notiert werden
- es wird ein Container-Div notiert, welches vom Javascript dynmaisch befüllt wird
- wenn die Fenstergröße verändert wird, wird das Div unter Berücksichtigung der neuen Bedingungen neu gezeichnet
- wenn horizontal gescrollt wird, wird das Div neu gezeichent

Hier der bisherige Aufbau (speichern als z.B. index.php):

PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Fixed Header</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
#fixeddiv
{
    position:fixed;
    bottom:0px;
    left:8px;
    padding:0; margin:0;
    background-color:transparent;
    color:#ffCC00;
    text-align:center;
    font-weight:bold;
}
.myTH
{
    background-color:#cf1218;
    color:#FFCC00;
    border:1px solid #ffcc00;
}
</style>
<script type="text/javascript" language="javascript">
function resizeFixeddiv()
{
    var mythead = document.getElementById("mythead");
    if (mythead)
    {
        var t='';
        var offsetx=0; // Offset für horizontales scrollen
        if (document.documentElement.scrollLeft ) offsetx=document.documentElement.scrollLeft; // IE alt
        if (window.pageXOffset) offsetx=window.pageXOffset; // richtige Browser :)
        var bottom=0; // errechneter Offset zum unteren Rand für absolute Positionierung der DIVs
        for (i=mythead.childNodes.length-1;i>=0;i--) // wir fangen in der letzten Zeile an, um den Offset einfach addieren zu können
        {
            if (mythead.childNodes[i].nodeName=="TR") // wenn es sich um eine neue Zeile handelt bearbeiten wir diese komplett
            {
                var myths=mythead.childNodes[i].getElementsByTagName("th");
                var offset_links=0-offsetx;
                var hoehe=myths[0].offsetHeight;
                var spaltenanzahl=myths.length;
                for (a=0;a<spaltenanzahl;a++)
                {
                    var breite=myths[a].offsetWidth;
                    var inhalt=myths[a].innerHTML;
                        t+='<div class="myTH" style="position:absolute;left:'+offset_links
                        +'px;bottom:'+bottom+'px;width:'+breite+'px;height:'
                        +hoehe+'px;">'+inhalt+'</'+'div>';
                    offset_links+=breite;
                }
                t+='<br>';
                bottom+=hoehe;
            }
        }
        document.getElementById("fixeddiv").innerHTML=t;
    }
}

function setHandler()
{
    if (document.body && document.body.offsetWidth)
    {
      window.onmouseup = resizeFixeddiv;
      window.onresize = resizeFixeddiv;
    }
    resizeFixeddiv();
}
</script>
</head>
<body onload="setHandler();" onmousemove="resizeFixeddiv()">

<table border="1" width="100%" cellpadding="0" cellspacing="0">
<thead id="mythead" >
<tr>
    <th>Spalte1 mit langer &Uuml;berschrift und gewolltem <br><i>Zeilenumbruch</i></th>
    <th>Noch eine Spalte</th>
    <th>Spalte2</th>
    <th>Spalte3</th>
    <th style="width:287px;">Spalte4</th>
    <th>Spalte5</th>
    <th>Spalte6</th>
    <th>Spalte7</th>
    <th>Spalte8</th>
    <th>Spalte9</th>
    <th>Spalte10</th>
</tr>
<tr>
    <th>2.Zeile Spalte1</th>
    <th colspan="2">2.Zeile Spalte2</th>
    <th style="width:287px;">2.Zeile Spalte3</th>
    <th>2.Zeile Spalte4</th>
    <th>2.Zeile Spalte5</th>
    <th>2.Zeile Spalte6</th>
    <th>2.Zeile Spalte7</th>
    <th>2.Zeile Spalte8</th>
    <th>2.Zeile Spalte9</th>
    <th>2.Zeile Spalte10</th>
</tr>
</thead>
<tbody>
<?php
// jetzt ein paar Dummy-Zeilen, damit wir scrollen käönnen
for ($a=0;$a<50;$a++)
{
    echo 
"<tr>\n";
    for (
$x=0;$x<11;$x++)
    {
        echo 
"<td>".$a." --- ".$x."</td>\n";
    }
}
?>
</tbody>
</table>
<br><br><br><br><br><br><br><br>
<div id="fixeddiv"></div>
</body>
</html>
Im Prinzip funktioniert das Script. Es gibt jedoch noch einige kleine Ungenauigkeiten und wie es mit der Browserkompatibilität
aussieht, ist mir auch noch nicht bekannt. Bei mir funktioniert es in IE6 und FF2. Ich veröffentliche das hier, um mit euch
gemeinsam meine rudimentären Javascriptkenntnisse durch eure Anregungen zu verbessern. Ich weiß ja, dass hier einige JS-Cracks
unterwegs sind.
Mein Ziel ist es also, meinen Ansatz mit euch gemeinsam zu verbessern, so dass wir ein allgemein einsetzbares Script erhalten,
welches aufgrund seiner einfachen Einbindung in bestehende Seiten seinen Weg in die Traumscript Ecke finden könnte.

Verbsserungswürdig sind aus meiner Sicht folgende Dinge:

- Im IE6 funktioniert bei mir bisher nur der Eventhandler "onmousemove" zuverlässig. Dieser wird aber so häufig aufgerufen,
dass das Div unnötig oft neu gezeichnet wird. Aus Programierersicht ist das eine Verschwendung von Rechenleistung.
Hier suche ich einen besser geeigneten Eventhandler.

- Im FF wird die Einschiebung nach links des Container-Divs berücksichtigt, so dass die generierten Spalten deckungsgleich
über den Tabellenspalten liegt. Im IE wird das ignoriert, so dass es hier zu einer Verschiebung kommt. Wie kann man das
sinnvoll anpassen?

- Das Script ermittelt Breite und Höhe der TH-Zellen. Erthält die Tabelle allerdings cellpadding-Angaben, so müssten
diese korrekterweise auch noch zur Breite und Höhe hinzuaddiert werden, was bisher nicht berücksichtigt wird.

Also spuckt mit mir gemeinsam in die Hände udn lasst uns das noch verbessern. Jede Anregung ist herzlich willkommen. Ich freue mich auf neue Erkenntnisse.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Linktipp

Alt 03.02.2008, 17:18   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Hi Daniel,

schau Dir mal die Tabellen von extJs an, die haben das schön gelöst. Vielleicht kannst Du Dir das abschauen, das ist sowieso eine gute Quelle was Browserkompatibilität angeht.

Hier ist eine Tabelle, die sich leider momentan nur mit Mausrad scrollen lässt:
http://www.sk-typo3.de/ExtJS-Grid.341.0.html
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 03.02.2008, 17:48   #3
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Hallo Steffen,

mein Ziel ist es nicht, auf ein vorhandene, komplexes Framework aufzusetzen, sondern eine schlanke eigene Lösung zu entwickeln, die sich problemlos in vorhandene Seiten einbinden lässt. Bis auf die genannten Kleinigkeiten funktioniert das ja auch schon prima.
Wenn ich hier zur Zusammenarbeit der TPler aufrufe, dann ist ein Verweis auf bereits vorhandene Lösungen nicht zielführend. Ich möchte das hier vorhandenen Knowhow nutzen, um mit den anderen ein TP-Traum-Script zu erschaffen. Den Anfang habe ich gemacht, indem ich eine funktionierende Basis zur Verfügung gestellt habe. Jetzt lasst uns technisch diskutieren was man noch wie verbessern könnte.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 06.02.2008, 12:16   #4
TP-Moderator
 
Benutzerbild von Malleus
 
Registriert seit: Aug 2004
Ort: Homburg / Saarland
Malleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKEMalleus ist ein richtiges Arbeitstier - DANKE
Nur ein kleines Feedback:

Leider hatte ich noch keine Zeit, mir das ganze genauer anzuschauen. Ich werd' es aber noch tun. Vielleicht kann ich Dir ja helfen.

Bis Bald!

Frank
Malleus ist offline   Mit Zitat antworten
Alt 11.02.2008, 20:43   #5
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Kurze Frage:
in einigen Tabellenkopfzeilen sind auch kleine Icons vorhanden, die per onclick-event eine Sortierung bewirken (ein Parameter als Hidden-Field wird gesetzt und ein submit() ausgelöst). Der Code wird über die Routine auch brav in die DIVs kopiert, jedoch funktionieren die onclick-Anweisungen in der kopierten Variante nicht.
Kann mir jemand sagen warum? Es wird doch mittels innerHTML alles 1:1 übernommen... Was ist der Grund?
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 24.02.2008, 23:26   #6
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Ok, betrachten wir den Aufruf als gescheitert.
Schade eigentlich...
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > HTML Puristen > Javascript
Tabellenkopf bei langen Tabellen fixieren Tabellenkopf bei langen Tabellen fixieren
« DIV Anordnung per Drag and Drop tauschen | Website Resizer.. Komme Leider nicht weiter :( »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:13 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 RC7 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67