解説っぽいもの?
だいたいこんな感じ?
- ブラウザが grid.pl にアクセスする.
- grid.pl が,
- 関数
init()で,テンプレートのパス設定とDB 接続をする. grid.pl?mode=grid_dataのようにアクセスされていないので,関数grid_data()を無視- 関数
main()で,テンプレート template_flexigrid.htm をロードし て,ブラウザに返す.
- 関数
- ブラウザが,返ってきた html を解釈する.
- ブラウザが,flexigrid.js や jquery.js や タグ
<script>の内容を実行する. - ブラウザがJS関数
$("#flex1").flexgrid()を実行したときに,grid.pl?mode=grid_dataに,アクセスする.(アクセスするページ番号,ソートカラム名,ソート方向とかも一緒に送る) - grid.pl が,
- 関数
init()は(略 - 関数
grid_data()が,sql を発行し,JSON データを返す.
- 関数
- ブラウザが,返ってきたデータをもとに,テーブルの表示を変更する.
テーブルのどっかイジったときには,5 番あたりから同じように アクセスする.
以降,UNIX 系 OS で Apache 系だと仮定.
-
Perl は動く? $ /usr/bin/perl -v :
-
必要なモジュールは入っている? 以下は標準じゃないっぽいモジュール名と入ってるかの簡略な確認法.
- DBI -
$ /usr/bin/perl -mDBI -cwe1 - JSON -
$ /usr/bin/perl -mJSON -cwe1もうちょっと例 #!/usr/bin/perl use CGI; use JSON; print CGI->header('text/x-json'); print to_json([{foo => bar}, 1, 2]); - Template -
$ /usr/bin/perl -mTemplate -cwe1
- DBI -
-
CGI は動く? 例えば,grid.pl と同じ位置に,hello.pl を配置したらhello って表示される? 以下 hello.pl の内容例. #!/usr/bin/perl use CGI; print CGI->header; print "hello";
-
データは入っている? $ mysql5 -u test -p -e 'select * from country' test Enter password: test +----+------+------+----------------+------+---------+ | id | iso | name | printable_name | iso3 | numcode | +----+------+------+----------------+------+---------+ | 1 | AR | aaaa | bbbb | cccc | dddd | | 2 | BR | aaa2 | bbb2 | ccc2 | ddd2 | +----+------+------+----------------+------+---------+
-
データはPerl 側から取得できる? 以下は,dbi.pl 内容例.
#!/opt/local/bin/perl use DBI; use Data::Dumper; { my $user = 'test'; my $pass = 'test'; my $database = 'test'; # DB 接続 my $dbh = DBI->connect("DBI:mysql:database=$database;host=", $user, $pass, { RaiseError => 1, PrintError => 1, AutoCommit => 0, }) or die $DBI::errstr; my $sql = q( SELECT SQL_CALC_FOUND_ROWS id , iso , name , printable_name , iso3 , numcode FROM country ); my $h = $dbh->prepare($sql) or die $DBI::errstr; $h->execute() or die $DBI::errstr; my @c = @{ $h->{NAME_lc} }; my %r; $h->bind_columns(\(@r{@c})); while ($h->fetch) { print(Data::Dumper->Dump([\%r])); } # DB 切断 $dbh->disconnect; }
- flexigrid.js 等の配置が正しいか確認.
- grid.pl の実行権の確認. $ ls -ln grid.pl -rwxr-xr-x 1 501 20 3460 2 4 10:03 grid.pl*
- そもそも grid.pl がコマンドラインで実行できるか確認. $ ./grid.pl : // HTML っぽいもの このときできるなら,標準エラーだけ見たい. $ ./grid.pl > /dev/null
投稿されたファイルだと,(最低でも)以下のファイルが必要.
ROOT/
grid.pl
template_flexigrid.htm
jquery.js
flexigrid.js
css/flexigrid/flexigrid.css
css/flexigrid/images/bg.gif
css/flexigrid/images/ddn.png
css/flexigrid/images/fhbg.gif
css/flexigrid/images/first.gif
css/flexigrid/images/last.gif
css/flexigrid/images/line.gif
css/flexigrid/images/load.gif
css/flexigrid/images/load.png
css/flexigrid/images/magnifier.png
css/flexigrid/images/next.gif
css/flexigrid/images/prev.gif
css/flexigrid/images/up.png
css/flexigrid/images/uup.png
css/flexigrid/images/wbg.gif
css/images/add.png
css/images/close.png
images/default.png
- firebug で,JSON を追ってみて,データがブラウザ側に来ているか確認
- firebug が無いならば,ブラウザから
http://<hostname>/<path>/grid.pl?mode=grid_data;page=1;rp=15;sortname=id;sortorder=ascみたいな感じでアクセスしてデータが取れるか試す. - データが来ているなら,データ構成を確認してみる.
- rows が無ければ表示されない.
- total が 0 ならば,rows があっても表示されない(っぽい).
- データが来ていない
- JSON でエラーになっている. JSON モジュールが正しくインストールされていない.
- JSON に渡す文字列は,decode 済み(UTF-8フラグON) でなければならな いので,Devel::Peek の 関数 Dump() で確認する.
JSON のデータ例
{
"page" : "1",
"total" : "239",
"rows" : [
{
"id" : 5,
"cell" : ["AD", "ANDORRA", "Andorra", "AND", "20", 0, "5"]
},
: // 続く
]
}