Hallo,
ich möchte ein Tab-separiertes Dokument mittels eines Perlskripts einlesen und als Tabelle ausgeben. Das funktioniert soweit. Jetzt möchte ich aber auch, dass die Tabellenspalten sortierbar sind! Dafür habe ich mir aus einem online-Tutorial etwas Javascript geborgt, und in einem HTML-Dokument mit Tabelle getestet -> funktioniert.
Wenn ich jetzt eine dynamische Seite mittels CGI erstelle, funktioniert die Sortierfunktion nicht mehr (der Mauszeiger reagiert auch nicht entsprechend, wenn man ihn über die "headings" bewegt) - ich folgere, dass die notwendigen Informationen nicht beim Browser ankommen! Irgendwas in meinen CGI-Anweisungen wird wohl nicht stimmen, nur was?
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/perl -wT
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
print header;
print start_html(
-title => 'generate dynamic sortable tables',
-style => 'js/sample.css', ## das Stylesheet wird verarbeitet!
-script => {
-language => 'javascript',
-src => 'js/TSorter_1.js', ## das Skript zum sortieren der Spalten
}
);
### init sortable tables
$JSCRIPT=<<END;
function init()
{
var TableSorter1 = new TSorter;
var TableSorter2 = new TSorter;
TableSorter1.init('housing_table_1');
TableSorter2.init('housing_table_2');
}
window.onload = init;
END
### einlesen der Daten
$input="/Library/WebServer/Documents/test/test.tab";
open(INP,$input);
$i=0;
while (<INP>)
{
@line = split(/\t/,$_);
if ($i==0)
{
@headings=@line;
@rows = th(\@headings);$i++;
}
else
{
push (@rows,td([@line]));
$i++;
}
}
### ausgeben der Tabelle aus gelesenen Daten
print table( {-border=>undef},
caption(b('your data!')),
Tr(\@rows)
);
## hier noch die Tabelle aus meinem ersten Gehversuch mit sortierbaren Spalten, im original HTML-Dokument hat das funktioniert!
print <<HTML;
<table id="housing_table_1" class="sortable">
<thead>
<tr>
<th abbr="link">ID</th>
<th abbr="input_text">NAME</th>
<th abbr="image_number">PRICE</th>
<th>LATITUDE</th>
<th>LONGITUDE</th>
<th abbr="link">ADDRESS</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href='http://peanut.uwaterloo.ca/ochousing2/dresults.asp?rid=12941'>12941</a></td>
<td class='in_cell'><input type='text' value='Mike' /></td>
<td><img src='../images/sorting/nav_step_2.png' />375</td>
<td>43.446885</td>
<td>-80.476264</td>
<td><a href='http://peanut.uwaterloo.ca/ochousing2/dresults.asp?rid=12941'>205 Weber St. East, Kitchener, ON</a></td>
</tr>
<tr>
<td><a href='http://peanut.uwaterloo.ca/ochousing2/dresults.asp?rid=12946'>12946</a></td>
<td class='in_cell'><input type='text' value='Teresa' /></td>
<td><img src='../images/sorting/nav_step_3.png' />400</td>
<td>43.424225</td>
<td>-80.539549</td>
<td><a href='http://peanut.uwaterloo.ca/ochousing2/dresults.asp?rid=12946'>53 High Acres Cr., Kitchener, ON</a></td>
</tr>
</tbody>
</table>
HTML
exit;
Irgendwas geht da durcheinander, in der originalen HTML-Datei, die eine sortierbare Tabelle erzeugte, sah der Header-Bereich so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Grid3 Example</title>
<link rel="stylesheet" type="text/css" href="js/sample.css" />
<script src="js/TSorter_1.js" type="text/javascript"></script>
<script type="text/javascript">
function init()
{
var TableSorter1 = new TSorter;
var TableSorter2 = new TSorter;
TableSorter1.init('housing_table_1');
TableSorter2.init('housing_table_2');
}
window.onload = init;
</script>
</head>
Meine Adaption dessen in CGI habe ich versucht, nach der Perldoc-Referenz entsprechend anzupassen, wahrscheinlich nicht ganz richtig!?
Wie man dann noch die Daten, die ich eingelesen habe, mittels CGI in eine Tabelle schreibt, muss ich mir dann überlegen!
gma