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.222 ]

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

Paginação de dados em PDO

wsnfe

Contador Automático

Text4Shell

Loja Virtual em PHP


  

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