亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? livegrid2.pm

?? web表格控件
?? PM
?? 第 1 頁 / 共 2 頁
字號:
#######################package DBIx::LiveGrid2;#######################use CGI;use vars qw/$vars $VERSION/;$VERSION = '0.01';sub run {    my( $self, $cfg, @query_params ) = @_;    my $liveGrid   = $self->new( %$cfg );    my $db_table   = $liveGrid->query_database( @query_params );    my $ajax_table = $liveGrid->build_ajax_table( $db_table );    $liveGrid->send_ajax_response( $ajax_table );}sub new {    my($class,%cfg) = @_;    my $self = bless \(do{my $anon}), $class;    my $cgi  = delete $cfg{cgi};    $cgi ||= CGI->new;    $vars      = \%cfg;    for my $param( qw/id offset page_size get_total/ ) {        my $val =  $self->clean_param( $param, $cgi->param($param) );        $self->set("ajax_$param", $val );    }    return $self;}sub clean_param {    my($self,$key,$val,$fields)=@_;    # OFFSET MUST BE ZERO OR GREATER ... DEFAULT = 0    if ($key eq 'offset') {        $val = 0 unless $val and $val =~ /^\d+$/ and $val > 0;    }    # PAGE_SIZE MUST BE A POSITIVE INTEGER LESS THAN 200 ... DEFAULT = 70    if ($key eq 'page_size') {        $val = 70 unless $val and $val =~ /^\d+$/ and $val > 0 and $val < 200;    }    # SORT_DIR MUST BE 'ASC' OR 'DESC' ... DEFAULT = ASC    if ($key eq 'sort_dir') {        $val = 'ASC' unless $val and $val =~ /^(ASC|DESC)$/i;    }    # SORT_COL MUST BE A SPECIFIED COLUMN    if ($key eq 'sort_col' and $fields) {        my %is_column = map {lc $_=>1} @$fields;        $val = '' unless $val and $is_column{lc $val};    }    return $val;}sub query_database {    my($self,$dbh,$table_name,$fields,$where)=@_;    my $rows     = $self->get('ajax_page_size') + 1;    my $offset   = $self->get('ajax_offset');    my $sort_dir = $self->get('ajax_sort_dir');    my $sort_col = $self->get('ajax_sort_col');       $sort_col = $self->clean_param('sort_col',$sort_col);    my @order    = ();    if ($sort_col) {        @order   = ("$sort_col $sort_dir");    }    require SQL::Abstract::Limit;    my $abstract = SQL::Abstract::Limit->new( limit_dialect => $dbh );    my( $stmt, @bind ) = $abstract->select( $table_name                                          , $fields                                          , $where                                          , \@order                                          , $rows                                          , $offset                                          );    $self->set("ajax_stmt", $stmt );    return $dbh->selectall_arrayref( $stmt, {}, @bind );}sub build_ajax_table {    my($self,$table_aoa) = @_;    my $table_data = '';    my $rowcount   = @$table_aoa;    $self->set("ajax_rowcount", $rowcount );    for my $row(@$table_aoa) {        $table_data .= '<tr>';        $table_data .= '<td>' . $_ . '</td>' for map {            defined $_ ? $self->clean_xml($_) : ''        } @$row;        $table_data .= "</tr>\n";    }    return $table_data;}sub clean_xml {    my($self,$str)=@_;    $str =~ s/&/&amp;/g;    $str =~ s/</&lt;/g;    $str =~ s/>/&gt;/g;    $str =~ s/"/&quote;/g;    return $str;}sub send_ajax_response {    my($self,$table_data)=@_;    my $ajax_stmt    = $self->get('ajax_stmt');    my $ajax_id      = ( $self->get('ajax_id') || 'data_grid' ) . '_updater';    my $xml_encoding = $self->get('xml_encoding') || 'ISO-8859-1';    print CGI::header('text/xml');    printf <<'EOT', $xml_encoding,$ajax_id,$table_data,$ajax_stmt;<?xml version="1.0" encoding="%s" standalone="yes"?>  <ajax-response>    <response type="object" id="%s"><rows update_ui="true">    %s</rows><debug>    %s</debug>EOT    my $rowcount=$self->get('ajax_rowcount');    if ($rowcount < $self->get('ajax_page_size')) {      my $totcnt=$rowcount+$self->get('ajax_offset');      print "\n<rowcount>$totcnt</rowcount>";
    }    print <<'EOT';    </response>  </ajax-response>EOT}sub set {    my($self,$key,$val) = @_;    $vars->{$self}->{$key}=$val;}sub get {    my($self,$key) = @_;    return $vars->{$self}->{$key};}sub DESTROY {    my $self = shift;    $dbh->disconnect if $dbh;    delete $vars->{$self};}1;__END__=pod=head1 NAMEDBIx::LiveGrid -- Ajax LiveGrid tables from any DBI data source=head1 SYNOPSISB<Automatically generate a basic sortable and scrollable liveGrid table>This will read an Ajax request; auto-generate a SQL query withORDER BY, LIMIT and WHERE clauses; then send the results of thequery as an Ajax response composed of rows in an XHTML table. use DBI; my $dbh        = DBI->connect( ... any DBI datasource ... ); my $table_name = 'countries' my @fields     = qw/name population human_development_index/; my @where      = ('population > 100000000'); DBIx::LiveGrid->run( $dbh, $table_name, \@fields, \@where );B<Or fine-tune the SQL and/or the XHTML yourself>This does the same, as the above, but breaks it into steps.  You cansubstitute your own methods for the SQL building stage and/or theHTML building stage. use DBI; my $dbh        = DBI->connect( ... any DBI datasource ... ); my $table_name = 'countries' my @fields     = qw/name population human_development_index/; # create a liveGrid object # my $liveGrid   = DBIx::LiveGrid->new; # let LiveGrid and SQL::Abstract construct your query # # or substitute your own routine that builds a results table # (an AoA such as would be returned by $dbh->selectall_arrayref) # my $db_table   = $liveGrid->query_database( $dbh                                           , $table_name                                           , \@fields                                           , \%where                                           ); # let LiveGrid build your HTML table # # or substiture your own routine that builds an XHTML table # (must be valid XHTML) # my $ajax_table = $liveGrid->build_ajax_table( $db_table ); # send the resulting XHTML table as an Ajax response # $liveGrid->send_ajax_response( $ajax_table );=head1 DESCRIPTIONThis module provides a link between Rico LiveGrids (dynamically scrollable database tables within web pages) and DBI (Perl's database interface).  With a half dozen lines of perl script and a short HTML section, you can create AJAX web windows into any DBI accessible database.DBIx::LiveGrid lets you build web pages containing tables whichare dynamically sortable and scrollable.  From the user's perspective,live grids work like google maps -- as you scroll through the grid,the data is dynamically refreshed from the database.  Users can also sorton any  column, simply by clicking on the column's header.From the programmer's perspective, DBIx::LiveGrid is an Ajax handler - it supplies XML data to XmlHttpRequests which dynamically update web pages.  It requires a server (a short CGI or mod_perl script you write to create and use a DBIx::LiveGrid object) and an HTML client (a short HTML page which you create based on supplied templates).On the client-side, DBIx::LiveGrid works in conjunction with two open source, easily available AJAX libraries (rico.js and prototype.js).  Rico developed the LiveGrid portion of these libraries from work on very large databases (at Sabre Airline Solutions) and have optimized the client end to request only the data it needs at any one time, and to buffer and cache data as needed.On the server-side, DBIx::LiveGrid works in conjunction with L<SQL::Abstract> and especially with L<SQL::Abstract::Limit> to translate Rico's requests for specific chunks of data into SQL clauses appropriate for any DBI data source. Or, if you prefer, you can skip the auto-generation and build your own SQL.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
88在线观看91蜜桃国自产| 国产成人亚洲综合色影视| 蜜臀a∨国产成人精品| 色一情一伦一子一伦一区| 欧美午夜在线一二页| 欧美视频在线播放| 精品国产乱码91久久久久久网站| 国产欧美综合在线观看第十页| 国产精品久久久久久久久久免费看| 一区二区三区在线视频免费| 免费精品视频在线| 成人av网址在线观看| 欧美夫妻性生活| 国产欧美精品区一区二区三区| 亚洲一区二区综合| 国产美女av一区二区三区| 色噜噜狠狠色综合中国| 精品乱人伦小说| 亚洲精选视频免费看| 久久成人av少妇免费| 91视视频在线观看入口直接观看www| 在线电影院国产精品| 国产精品麻豆一区二区| 免费看日韩精品| 99re视频精品| 亚洲精品在线观看网站| 亚洲午夜电影在线| 成人综合激情网| 欧美一区二区美女| 亚洲激情一二三区| 高清不卡在线观看| 日韩欧美黄色影院| 一区二区高清免费观看影视大全| 国产成人在线网站| 欧美一级国产精品| 一区二区三区美女视频| 国产成人高清在线| 日韩三级视频在线看| 亚洲一区二区三区小说| 不卡一区二区中文字幕| 日韩视频不卡中文| 天天爽夜夜爽夜夜爽精品视频| www.在线成人| 国产亚洲自拍一区| 久久精品国产在热久久| 欧美精品v国产精品v日韩精品| 日韩理论片在线| 国产成人午夜视频| 精品美女一区二区| 欧美aaaaaa午夜精品| 欧美日韩性生活| 亚洲精品久久久蜜桃| 日韩三级.com| 亚洲一区二区三区免费视频| 99国产精品一区| 国产亚洲欧洲997久久综合 | 波多野结衣中文字幕一区二区三区| 日韩欧美视频一区| 日韩国产精品久久久久久亚洲| 91九色02白丝porn| 亚洲精品视频免费观看| 不卡一二三区首页| 欧美极品另类videosde| 国产一区二区女| 精品国产电影一区二区| 久久国产免费看| 欧美一级生活片| 日本特黄久久久高潮 | 日韩精品1区2区3区| 欧美日韩国产首页| 亚洲国产婷婷综合在线精品| 91久久精品日日躁夜夜躁欧美| 亚洲欧美日韩国产成人精品影院| 成人av午夜电影| 综合久久久久久| 97se亚洲国产综合在线| 亚洲视频你懂的| 91视频一区二区三区| 亚洲激情自拍视频| 欧美日韩日日骚| 午夜精品aaa| 日韩一区二区三区高清免费看看 | 精品福利一二区| 国产伦精品一区二区三区视频青涩| 久久只精品国产| 国产成人自拍网| 国产精品国产三级国产三级人妇 | 国产精品欧美经典| 97精品国产露脸对白| 亚洲一区在线观看免费观看电影高清| 91国产成人在线| 偷拍与自拍一区| 欧美成人精品1314www| 国产一区在线观看视频| 国产欧美视频在线观看| 91在线视频免费观看| 国产乱子伦一区二区三区国色天香| 精品对白一区国产伦| 国产91精品露脸国语对白| 亚洲欧洲性图库| 色婷婷国产精品综合在线观看| 日韩av中文字幕一区二区| 久久久无码精品亚洲日韩按摩| 99久久99久久综合| 午夜精品一区二区三区免费视频| 日韩欧美亚洲一区二区| 懂色av一区二区三区免费看| 亚洲精品久久久蜜桃| 欧美一区二区美女| 成人免费福利片| 亚洲成a人片在线观看中文| 日韩精品一区二区三区在线播放| 国产成人精品综合在线观看 | 制服丝袜亚洲色图| 国产精品亚洲午夜一区二区三区 | 色播五月激情综合网| 美女在线观看视频一区二区| 欧美高清在线视频| 欧美性高清videossexo| 狠狠色综合播放一区二区| 亚洲欧美精品午睡沙发| 欧美一区二区三区在线观看视频 | 成人免费一区二区三区在线观看| 欧美日韩一区国产| 国产乱码一区二区三区| 亚洲在线成人精品| 久久亚洲一区二区三区明星换脸| 色综合天天综合狠狠| 国产一区二区三区蝌蚪| 一区二区三区在线不卡| 久久综合九色综合欧美就去吻| 欧亚一区二区三区| 国产激情视频一区二区三区欧美| 亚洲一区二区三区激情| 国产日韩欧美不卡在线| 日韩欧美色综合| 91国产丝袜在线播放| 国产1区2区3区精品美女| 日本v片在线高清不卡在线观看| 亚洲视频资源在线| 欧美精品一区二区三| 欧美日精品一区视频| 成人深夜视频在线观看| 美女视频黄久久| 亚洲国产日韩精品| 国产精品久久精品日日| 亚洲精品一区二区三区精华液 | 福利电影一区二区| 麻豆国产精品一区二区三区| 一区二区三区中文字幕| 亚洲国产精品精华液ab| 日韩一区二区三区四区| 欧美在线免费观看亚洲| eeuss鲁一区二区三区| 国产呦精品一区二区三区网站| 日韩成人av影视| 亚洲高清在线视频| 亚洲品质自拍视频| 国产农村妇女毛片精品久久麻豆 | 国产很黄免费观看久久| 蜜臀久久99精品久久久久宅男| 亚洲一区二区av电影| 综合自拍亚洲综合图不卡区| 国产亚洲一二三区| 欧美大度的电影原声| 91精品免费观看| 欧美男男青年gay1069videost| 91美女蜜桃在线| av成人免费在线观看| 岛国一区二区三区| 国产成人免费在线| 国产精品一二三四| 国产精品538一区二区在线| 久久精品国产亚洲aⅴ| 奇米精品一区二区三区四区| 日日噜噜夜夜狠狠视频欧美人| 亚洲国产视频a| 亚洲国产cao| 亚洲国产精品久久久久婷婷884| 亚洲精品中文字幕在线观看| 亚洲免费观看高清完整版在线 | 色88888久久久久久影院野外| 99久久99久久精品国产片果冻 | 一区二区三区中文字幕| 亚洲综合在线电影| 一区二区免费在线| 亚洲综合在线免费观看| 午夜影院在线观看欧美| 日韩影视精彩在线| 日韩成人一级片| 久久成人免费日本黄色| 精品一区二区日韩| 国产精品一区二区在线看| 国产成人av一区二区三区在线观看| 国产成人精品免费在线| 99精品视频中文字幕| 91成人免费网站| 在线不卡欧美精品一区二区三区| 日韩一区二区免费视频| 久久久高清一区二区三区|