SuperTab - tabela HTML com paginação e ordenação (PHP + MySQL)
Publicado por EVERTON DA ROSA (última atualização em 30/11/2010)
[ Hits: 13.082 ]
Homepage: http://everton3x.github.io
SuperTab é uma classe desenvolvida em PHP que cria uma tabela HTML com paginação e ordenação, a partir de dados armazenados em um banco de dados MySQL.
Junto com esta versão você encontra um arquivo de ajuda com exemplo de instalação e descrição dos métodos.
<?php /* * Classe PHP SuperTab * Cria uma tabela HTML a partir de uma consulta a banco de dados Mysql, * com suporte a paginação e ordenção dos resultados. * Desenvolvido por Everton da Rosa everton3x@gmail.com * Página do projeto em http://everton3x.orgfree.com * versão 1.0 @ 2010 nov 06 */ class SuperTab { protected function sqlexec($sql) { /* * Método sqlexec() * Retorna o resultado da consulta ao Mysql recebida em $sql. * Recebe como parâmetro em $sql uma string de consulta Mysql. * Customize este método da forma que melhor lhe convir. * O importante é que o resultado da consutla seja retornado. */ mysql_connect('localhost', 'teste', '123') or die(mysql_error()); mysql_select_db('information_schema') or die(mysql_error()); $result = mysql_query($sql) or die(mysql_error()); return $result; } protected function getData($sql) { /* * Método getData() * Retorna um array com os dados necessários para a tabela ser montada. * Recebe como parâmetro em $sql uma string de consulta ao Mysql. * A consulta não deve conter cláusula ORDER BY ou LIMIT. * Consultas SQL complexas podem não funcionar como desejado. * Não altere nada exceto se souber o que está fazendo. */ $cfg = $_REQUEST; //Paginação switch($cfg['rows']){ case 10: $rows = 10; break; case 25: $rows = 25; break; case 50: $rows = 50; break; case 100: $rows = 100; break; default: $rows = 25; //Quantidade de linhas por página padrão break; } if($cfg['page']) { $page = $cfg['page']; } else { $page = 1; } //Fim da paginação //Ordenação if($cfg['orderby']){ $orderby = SuperTab::putSpace($cfg['orderby']); }else{ $orderby = false; } $cfg['order'] = strtoupper($cfg['order']); switch($cfg['order']){ case 'ASC': $order = 'ASC'; break; case 'DESC': $order = 'DESC'; break; default: $order = 'ASC'; break; } if($orderby) { $order = ' ORDER BY `'.$orderby.'` '.$order; $sql .= $order; } //Fim da ordenação //echo $sql; $result = SuperTab::sqlexec($sql);//Pega o resultado da consulta ao Mysql $data['tf']['total'] = @mysql_num_rows($result); if($data['tf']['total'] == 0){ return 0; } //Mais paginação $last_page = ceil($data['tf']['total'] / $rows); if($page > $last_page){ $page = $last_page; } $num_fld = @mysql_num_fields($result); $start = ($page - 1) * $rows; $end = $start + $rows; if($end > $data['tf']['total']){ $end = $data['tf']['total']; } //Fim de mais paginação //Montagem das linhas de resultado e do cabeçalho $data['tb'] = array(); for($i = 0; $i < $num_fld; $i++){ $data['fld'][$i] = @mysql_field_name($result, $i); } $i = 1; while($r = @mysql_fetch_array($result)){ if($i > $start && $i <= $end){ reset($data['fld']); foreach($data['fld'] as $fld){ $data['tb'][$i][$fld] = $r[$fld]; } } $i++; } //Fim da montagem das linhas de resultado e cabeçalho $data['tf']['first_reg'] = $start+1; $data['tf']['last_reg'] = $end; $data['tf']['last_page'] = $last_page; return $data; } public function getTable($sql, $method = 'get'){ /* * Método getTabel() * Retorna uma string contendo o código HTML da tabela. * Recebe os parâmetros $sql (string de consulta ao Mysql) e * $method (Não obrigatório. Aceita get ou post, sendo o método de * envio dos dados de ordenação e paginação.). * Não altere nada aqui se não souber o que está fazendo. * Se deseja customizar sua tabela, colocando mais estruturas, este * é o lugar, desde que saiba o que está fazendo. */ $cfg = $_REQUEST;//Pega os dados enviados por GET ou POST $data = SuperTab::getData($sql);//Busca os dados para a tabela if($data == 0){//Retorna mensagem se a consulta ao banco de dados resultar em zero linhas return '<p>Sem dados para exibir!</p>'; } //TBODY foreach($data['tb'] as $tr){//Monta as linhas com resultado para a tabela $rows .= '<tr>'; foreach($tr as $value){ if($value == ''){ $value = ' '; } $rows .= '<td>'.$value.'</td>'; } $rows .= '</tr>'; } $tbody = '<tbody>'.$rows.'</tbody>'; //Fim TBODY //Ordenação if($cfg['orderby']){ $orderby = $cfg['orderby']; }else{ $orderby = false; } $cfg['order'] = strtoupper($cfg['order']); switch($cfg['order']){ case 'ASC': $order = 'ASC'; break; case 'DESC': $order = 'DESC'; break; default: $order = 'ASC'; break; } reset($data['fld']); foreach($data['fld'] as $fld){ $fldv = SuperTab::noSpace($fld); if($fldv == $cfg['orderby']){ $sel = ' selected="selected"'; }else{ $sel = ''; } $order_option .= '<option value="'.$fldv.'"'.$sel.'>'.$fld.'</option>'; } $order_field .= '<select name="orderby">'.$order_option.'</select>'; $order_option = ''; switch ($order){ case 'ASC': $order_option .= '<option value="ASC" selected="selected">ASC</option>'; $order_option .= '<option value="DESC">DESC</option>'; break; case 'DESC': $order_option .= '<option value="ASC">ASC</option>'; $order_option .= '<option value="DESC" selected="selected">DESC</option>'; break; default: $order_option .= '<option value="ASC" selected="selected">ASC</option>'; $order_option .= '<option value="DESC">DESC</option>'; break; } $order_field .= '<select name="order">'.$order_option.'</select>'; $order = '<fieldset id="ordenar"><legend>Ordenar</legend>'.$order_field.'<input type="submit" value="Ordenar" /></fieldset>'; //Fim Ordenação //THEAD reset($data['fld']); foreach($data['fld'] as $fld){ $th .= '<th>'.$fld.'</th>'; } $thead = '<thead><tr>'.$th.'</tr></thead>'; //Fim THEAD //Tabela e formulário $tbl_start_tag = '<table>'; $tbl_end_tag = '</table>'; if($_SERVER['QUERY_STRING']){ $query_string = '?'.$_SERVER['QUERY_STRING']; } $action = $_SERVER['SCRIPT_NAME'].$query_string; $frm_tag_start = '<div id="limpar"><a href="'.$_SERVER['SCRIPT_NAME'].'">Limpar tudo</a></div><form action="'.$action.'" method="'.$method.'">'; $frm_tag_end = '</form><div id="limpar"><a href="'.$_SERVER['SCRIPT_NAME'].'">Limpar tudo</a></div>'; //Fim tabela e formulário //Paginação if($cfg['page'] >= 1 && $cfg['page'] <= $data['tf']['last_page']){ $page = $cfg['page']; }elseif($cfg['page'] > $data['tf']['last_page']){ $page = $data['tf']['last_page']; }else{ $page = 1; } $pages_field .= '<select name="page">'; for($p = 1; $p <= $data['tf']['last_page']; $p++){ if($p == $page){ $sel = ' selected="selected"'; }else{ $sel = ''; } $pages_field .= '<option value="'.$p.'"'.$sel.'>'.$p.'</option>'; } $pages_field .= '</select>'; $rows_field .= '<select name="rows">'; switch($cfg['rows']){ case 10: $rows = 10; break; case 25: $rows = 25; break; case 50: $rows = 50; break; case 100: $rows = 100; break; default: $rows = 25;//Linhas por página padrão break; } $array = array(10, 25, 50, 100); foreach($array as $tmp){ if($tmp == $rows){ $sel = ' selected="selected"'; }else{ $sel = ''; } $rows_field .= '<option value="'.$tmp.'"'.$sel.'>'.$tmp.'</option>'; } $rows_field .= '</select>'; $paging = '<fieldset id="paginar"><label>Página:</label>'.$pages_field.'<label>Registros por página:'.$rows_field.'<input type="submit" value="Ir" />'; //Fim paginação //TFOOT $tfoot = '<tfoot><tr><td colspan="'.count($data['fld']).'">Registros '.$data['tf']['first_reg'].' a '.$data['tf']['last_reg'].' de '.$data['tf']['total'].'</td></tr></tfoot>'; //Fim TFOOT //Montagem final da tabela $table = $frm_tag_start.$order.$tbl_start_tag.$thead.$tbody.$tfoot.$tbl_end_tag.$paging.$frm_tag_end; //Fim da montagem final da tabela return $table; } protected function noSpace($string){ /* * Método noSpace() * Substitui espaços por "_" (underline) na string passada por $string * Necessário para parâmetros passados por GET */ $string = eregi_replace(' ', '_', $string); return$string; } protected function putSpace($string){ /* * Método putSpace() * Substitui "_" (underline) por espaço na string passada por $string * Necessário para parâmetros passados por GET */ $string = eregi_replace('_', ' ', $string); return $string; } } ?>
Folha de Ponto, com datas móveis como Carnaval Sexta-Feira Santa e Corpus Christi
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Failed to start Zabbix Server (2)
Gentoo bane contribuições de código feitas com IA (8)
Ubuntu — tentando iniciar o windows? (3)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba