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.485 ]
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;
}
}
?>
TxtXtrator: Classe para extração e conversão de dados de arquivos texto
Biblioteca de classes para facilitar a criação de formulários e conexão ao MySQL
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Estou tentando ser legalista, mas tá complicado! (9)
espelhar monitores nao funciona (2)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)









