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.224 ]
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; } } ?>
Formularios Atomatic Esse vcs vao adorar
Consulta Amazon! Buscas na Web
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta