teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記を受けて

2018/02/28 05:54

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,4 +1,119 @@
1
1
  見た目をどうするか、なのでPHPというよりもjavascript,css案件ですね。
2
2
  あくまでテーブルはPHPで作成されているわけではなく、PHPで出力されたHTMLによって作成されているので。
3
3
 
4
- 「ヘッダー固定テーブル」で検索すると自作、プラグイン 色々でてきますので参考にしてみてください。
4
+ 「ヘッダー固定テーブル」で検索すると自作、プラグイン 色々でてきますので参考にしてみてください。
5
+
6
+
7
+ # 追記を受けて
8
+
9
+ サーバー側の言語の出力とあわせて作る場合、いきなり全てやろうとしてはどこかで辻褄が合わなくなって逃げたくなります(私も経験があります)
10
+
11
+ なので、下記のような手順を踏みます。
12
+
13
+ 0. 出力結果のHTMLをテスト的な中身で作り上げる
14
+ 0. それぞれを1個ずつ当てはめていき、調整する
15
+
16
+ 1が結構大事です。まずはモック(試作品)で完成品へのイメージを持つことです。
17
+ そのあとに当てはめていき、モックと同じような構成で出力できているかを確認します。
18
+
19
+ 1. 出力結果のHTMLをテスト的な中身で作り上げる
20
+
21
+ ※ヘッダーが30以上とのことですが、増やせばいいだけですので、ひとまず最少構成で組んでいます。
22
+ ```html
23
+ <table id="tbl_list">
24
+ <thead>
25
+ <tr>
26
+ <th scope="col" class="maker_name">メーカー名</th>
27
+ <th scope="col" class="serial_no">シリアルNo</th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <tr>
32
+ <td class="maker_name">aaaa</td>
33
+ <td class="serial_no">bbbb</td>
34
+ </tr>
35
+ <tr>
36
+ <td class="maker_name">aaaa</td>
37
+ <td class="serial_no">bbbb</td>
38
+ </tr>
39
+ <tr>
40
+ <td class="maker_name">aaaa</td>
41
+ <td class="serial_no">bbbb</td>
42
+ </tr>
43
+ </tbody>
44
+ </table>
45
+ ```
46
+ 提示のサイトでいえば、最初のパターンになると思います。
47
+ cssは下記のように組んでみました。
48
+ ```css
49
+ table#tbl_list th.maker_name,table#tbl_list td.maker_name{
50
+ width:70px;
51
+ }
52
+ table#tbl_list th.serial_no,table#tbl_list td.serial_no{
53
+ width:100px;
54
+ }
55
+ table#tbl_list thead, tbody {
56
+ display: block;
57
+ }
58
+ table#tbl_list tbody {
59
+ overflow-x: hidden;
60
+ overflow-y: scroll;
61
+ height: 220px;
62
+ }
63
+ ```
64
+ 最初に提示された情報がヘッダー2つ?だったため、1つ1つにCSSクラスをつけていますが、
65
+ 面倒であれば提示サイトのようにth,tdを一気に全て指定してしまっても構いません。
66
+ ※ヘッダとそれに付随するセルの幅が同じであればおそらく問題ないです。
67
+ tbodyに指定したheightも好みにあわせて変更してください。
68
+
69
+ 私の方はGoogleChrome最新にて動作確認しました。
70
+
71
+ 2. それぞれを1個ずつ当てはめていき、調整する
72
+
73
+ CSSは変更不要です。html部分と、PHPに書かれているHTML部分の調整となります。
74
+
75
+ ※同等の情報が用意できているわけではないのでほぼ未検証です。
76
+ --javascript変更なし
77
+ ```html
78
+ <div class="hyou2" id="tbldata"></div>
79
+ ```
80
+ スクロールをテーブル自身に入れるので外しています。
81
+
82
+ ```php
83
+ //ヘッダー部
84
+ $strHTML = '<table id="tbl_list">
85
+ <thead>
86
+ <tr>
87
+ <th scope="col" class="f-weight maker_name">メーカー名</th>
88
+ <th scope="col" class="f-weight serial_no">シリアルNo</th>
89
+ .....省略
90
+ </tr>
91
+ </thead>
92
+ ';
93
+
94
+
95
+ $strHTML .= "<tbody>";
96
+ if ($datanum > 0) {
97
+
98
+ while ($CN->EOF() == true) {
99
+
100
+ //データ部
101
+ $strHTML .= "<tr ".$bgcolor.">
102
+ <td class='break maker_name'>"._hs($CN->GetFieldData('maker_name'))."</td>
103
+ <td class='break serial_no'>"._hs($CN->GetFieldData('maker_serial'))."</td>
104
+ .....省略
105
+ </tr>";
106
+
107
+ $CN->MoveNext();
108
+
109
+ }
110
+
111
+ } else {
112
+ $strHTML .= "<tr><td colspan='28'>該当するデータがありません。</td></tr>";
113
+ }
114
+
115
+ $strHTML .= "</tbody>
116
+ </table>";
117
+ ```
118
+
119
+ f-weight、breakなどとりあえずそのままにしていますが、何かしら指定されていてヘッダ固定に影響あるようであれば削除するなど調整してください。