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.447 ]
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;
}
}
?>
FormConstructor: Formulário Construído por Variável
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
É normal não gostar de KDE? (9)
Linux é a solução para o fim do Windows10? (2)
Problemas com Driver NVIDIA (4)









