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

Download supertab-1.0.tgz




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.

  



Esconder código-fonte

<?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;
    }
}
?>

Scripts recomendados

Contador de Acessos

Menu Dinâmico Horizontal

Formata número

Folha de Ponto, com datas móveis como Carnaval Sexta-Feira Santa e Corpus Christi

MY SQL


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts