Code Igniter User Guide Version 1.5.2


Classe Tabela HTML

A Classe Tabela provê funções para que você gere tabelas HTML automaticamente a parti de arrays ou de conjutos de resultados do banco de dados.

Inicializando a Classe

Como a maioria das classes no Code Igniter, a classe Tabela é inicializada em seu controller usando a função $this->load->library:

$this->load->library('table');

Uma vez carregada, o objeto estará disponível usando: $this->table

Exemplos

Este exemplo mostra como você pode criar uma tabela a partir de uma array multidimensional. Note que o primeiro índice da array se tornará o cabeçalho da tabela (ou você pode configurar seu próprio cabeçalho usando a função set_heading() descrita na referência da função abaixo).

$this->load->library('table');

$data = array(
             array('Nome', 'Cor', 'Tamanho'),
             array('Fred', 'Azul', 'Pequeno'),
             array('Mary', 'Vermelho', 'Grande'),
             array('John', 'Verde', 'Médio')
             );

echo $this->table->generate($data);

Aqui vai um exemplo de uma tabela criada a partir de um resultado de uma query no banco. A classe Tabela irá gerar automaticamnete o cabeçalho baseada no nome das tabelas (lembre-se que você pode confitgurar eu próprio cabeçalho usando a função set_heading() descrita na referência da função abaixo).

$this->load->library('table');

$query = $this->db->query("SELECT * FROM minha_tabela");

echo $this->table->generate($query);

Aqui vai um exemplo mostrando como você poderia criar uma tabela usando parâmetros discretos:

$this->load->library('table');

$this->table->set_heading('Nome', 'Cor', 'Tamanho');

$this->table->add_row('Fred', 'Azul', 'Pequeno');
$this->table->add_row('Mary', 'Vermelho', 'Grande');
$this->table->add_row('John', 'Verde', 'Médio');

echo $this->table->generate();

Aqui vai o mesmo exemplo acima, exceto que no lugar de parâmetros individuais, foram usadas arrays: $this->load->library('table');

$this->table->set_heading(array('Nome', 'Cor', 'Tamanho'));

$this->table->add_row(array('Fred', 'Azul', 'Pequeno'));
$this->table->add_row(array('Mary', 'Vermelho', 'Grande'));
$this->table->add_row(array('John', 'Verde', 'Médio'));

echo $this->table->generate();

Alterando o visual da sua tabela

A classe Tabela permite que você use um template com o qual você pode especificar o layout de sua tabela. Aqui vai um protótipo do template:

$tmpl = array (
                    'table_open'          => '<table border="0" cellpadding="4" cellspacing="0">',

                    'heading_row_start'   => '<tr>',
                    'heading_row_end'     => '</tr>',
                    'heading_cell_start'  => '<th>',
                    'heading_cell_end'    => '</th>',

                    'row_start'           => '<tr>',
                    'row_end'             => '</tr>',
                    'cell_start'          => '<td>',
                    'cell_end'            => '</td>',

                    'row_alt_start'       => '<tr>',
                    'row_alt_end'         => '</tr>',
                    'cell_alt_start'      => '<td>',
                    'cell_alt_end'        => '</td>',

                    'table_close'         => '</table>'
              );

$this->table->set_template($tmpl);

Nota:  Você irá notar que há 2 conjuntos de blocos de "linha" (rows) no template. Isto lhe permite criar linhas com cores alternadas ou projetar elementos que se alteram em cada interação ocm os dados da linha.

Você NÃO é obrigado a submeter um template completo. Se apenas precisa alterar partes do layout, pode simplismente submeter estes elementos. Neste exemplo, apenas a tag de abertura da tabela foi alterada:

$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1" class="minhatabela">' );

$this->table->set_template($tmpl);

Referência da Função

$this->table->generate()

Retorna uma string contendo a tabela gerada. Aceita parâmetros opcionais os quais podem ser uma array ou um objeto vindo do banco.

$this->table->set_caption()

Lhe permite adicinar uma legenda para a tabela.

$this->table->set_caption('Cores');

$this->table->set_heading()

Lhe permite configurar o cabeçalho da tabela. Você pode submeter uma array ou parâmetros discretos:

$this->table->set_heading('Nome', 'Cor', 'Tamanho'); $this->table->set_heading(array('Nome', 'Cor', 'Tamanho'));

$this->table->add_row()

Lhe permite adicionar uma linha à tabela. Você pode submeter uma array ou parâmetros discretos:

$this->table->add_row('Azul', 'Vermelho', 'Verde'); $this->table->add_row(array('Azul', 'Vermelho', 'Verde'));

$this->table->make_columns()

Esta função pega uma array unidimensional como entrada e cria uma multidimensional com uma profundidade (depth) igual ao número de colunas desejadas. Isto permite que uma única array, com vários elementos, seja mostrada numa tabela que tem um número fixo de colunas. Considere este exemplo:

$lista = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');

$nova_lista = $this->table->make_columns($lista, 3);

$this->table->generate($nova_lista)

// Gera uma tabela com este protótipo

<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td>one</td><td>two</td><td>three</td>
</tr><tr>
<td>four</td><td>five</td><td>six</td>
</tr><tr>
<td>seven</td><td>eight</td><td>nine</td>
</tr><tr>
<td>ten</td><td>eleven</td><td>twelve</td></tr>
</table>

$this->table->set_template()

Lhe permite configurar seu template. Você pode submeter um template completo ou parcial.

$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1" class="minhatabela">' );

$this->table->set_template($tmpl);

$this->table->set_empty()

Lhe permite configurar um valor default para usar em qualquer célula de tabela que é vaza. Você pode, por exemplo, usar   :

$this->table->set_empty("&nbsp;");

$this->table->clear()

Lhe permite limpar o cabeçalho ou dado de uma linha da tabela. Se precisar mostrar múltiplas tabelas com diferentes dados, você deve chamar esta função depois que cada tabela for gerada, para limpar a informação da tabela anterior. Exemplo:

$this->load->library('table');

$this->table->set_heading('Nome', 'Cor', 'Tamanho');
$this->table->add_row('Fred', 'Azul', 'Pequeno');
$this->table->add_row('Mary', 'Vermelho', 'Grande');
$this->table->add_row('John', 'Verde', 'Médio');

echo $this->table->generate();

$this->table->clear();

$this->table->set_heading('Nome', 'Dia', 'Tipo de Entrega');
$this->table->add_row('Fred', 'Quarta-feira', 'Expressa');
$this->table->add_row('Mary', 'Segunda-feira', 'Por avião');
$this->table->add_row('John', 'Sábado', 'De noite para o dia');

echo $this->table->generate();