domingo, setembro 26, 2010

Tutorial CodeIgniter - parte 2

Vamos dar continuidade ao desenvolvimento da aplicação usando o CodeIgniter, na pasta sirh/system/application/controllers crie o arquivo bacia.php com o conteúdo abaixo:

<?php
class Bacia extends CI_Controller
{

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        echo "<h1>Testando... 1, 2, 3</h1>";
    }
}
 No código anterior, criamos o controlador bacia, com a função index, que é exibida por default quando o controlador é chamado. Logo ao digitarmos a url:  http://localhost/sirh/index.php/bacia, veremos a mensagem de teste (Figura 1).

Figura 1 - teste do controlador bacia
Testado o funcionamento do controller bacia, vamos adicionar o cabeçalho e título da nossa página, modificando o código da função index:

function index()
{
  $data['titulo'] = "SIRH";
  $data['cabecalho'] = "Bacias Hidrográficas";

  $this->load->view('bacia_view', $data);
}

agora, dentro da pasta views, em sirh/system/application/, crie um arquivo com o nome bacia_view.php, com o seguinte conteúdo:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <title><?=$titulo?></title>
   </head>

   <body>
      <h2><?=$cabecalho?></h2>
   </body>
</html>

Abra mais uma vez o endereço http://localhost/sirh/index.php/bacia , o resultado deve ser o da Figura 2

Figura 2 - definidos o título e o cabeçalho da página
Está na hora de inserirmos alguns dados para a visualização, execute o script abaixo no banco, para povoar as duas tabelas:

-- INSERINDO 3 Bacias Hidrográficas
INSERT INTO bacia_hidrografica(nome_bacia) VALUES ('Abiaí');
--
INSERT INTO bacia_hidrografica(nome_bacia) VALUES ('Mamanguape');
--
INSERT INTO bacia_hidrografica(nome_bacia) VALUES ('Gramame');

-- INSERINDO 6 Rios nas suas respectivas Bacias
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Papocas', 9, 1);
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Graú', 12, 1);
--
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Mogeiro', 23, 2);
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Gavião', 9, 2);
--
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Guarabira',31, 3);
INSERT INTO rio(nome_rio, comprimento_km, id_bacia) VALUES ('Jacaré', 7, 3);

vamos agora exibir os dados que foram inseridos na tabela bacia_hidrografica, para isso será necessário criar um model (dentro de sirh/system/application/model) , que chamaremos de bacia_model.php, com o seguinte conteúdo:

<?php
class Bacia_model extends CI_Model
{
    function  __construct()
    {
        parent:__construct();
    }

    function get_bacia()
    {
        $this->db->order_by('nome_bacia', 'asc');
        $query = $this->db->get('bacia_hidrografica');
        if ($query->num_rows() > 0)
        {
            return $query->result();
        }
        else
        {
            return false;
        }
    }
}

Agora, vamos modificar o nosso controlador, carregando o model criado e povoando uma variável com um array de objetos, obtidos através da função get_bacia():

<?php
class Bacia extends CI_Controller
{

    function __construct()
    {
        parent::__construct();
        $this->load->model('bacia_model');
    }

    function index()
    {
        $data['titulo'] = "SIRH";
        $data['cabecalho'] = "Bacias Hidrográficas";

        $data['bacias'] = $this->bacia_model->get_bacia();

        $this->load->view('bacia_view', $data);
    }
}

Para finalizar esta postagem, vamos agora modificar a nossa view, basicamente vamos varrer o array de objetos $data['bacias'] e exibir os resultados, também vamos utilizar a função anchor() do CodeIgniter para definir os links desta página, que serão finalizados no próximo Post:


<h2><?=$cabecalho ?></h2>

<p><?=anchor('bacia/criar', 'Criar Bacia Hidrográfica') ?></p>

<table border="1">
    <thead>
        <tr>
            <th>
                Nome da Bacia
            </th>
            <th>
                Ações
            </th>
        </tr>
    </thead>
    <tbody>
        <?php if ($bacias != false): ?>
        <?php foreach ($bacias as $bacia): ?>
            <tr>
            <td>
                <?=$bacia->nome_bacia ?>
            </td>
            <td>
                <?=anchor('bacia/editar/' . $bacia->id_bacia, 'Editar') ?> |
                <?=anchor('bacia/deletar/' . $bacia->id_bacia, 'Deletar') ?>
            </td>
        </tr>
        <?php endforeach; ?>
        <?php else: ?>
        <p>Não há registros cadastrados!</p>
        <?php endif ?>
    </tbody>
</table>

Salve todos os arquivos e abra o navegador e veja o resultado: http://localhost/sirh/index.php/bacia

Figura 3 - Exibição das Bacias Hidrográficas
  Bem pessoal, por hoje é só, para ajudar no entendimento deste exemplo, sugiro dar uma boa olhada na série de screencasts do Nettus+ sobre o CodeIgniter (item 5 do link).

8 comentários:

mensagens disse...

O exemplo só funcionou para vc.

Marcello Benigno disse...

Para mim e para aqueles que utilizaram a versão 1.7

Antonio Júnior disse...

Muito bom! Funcionou 100% pra quem seguiu o tutorial.

Leandro Marcel disse...

Bom, para mim tb não funcionou, apresentou a seguinte msg: "Fatal error: Class 'Controller' not found in C:\Apache\htdocs\sirh\application\controllers\bacia.php on line 1"

Marcello, pode nos ajudar... parabéns pela iniciativa...

abraço.

Leandro Marcel

Marcello Benigno disse...

Leandro, ele tutorial é para a versão 1.7, vou atualizá-lo muito em breve para a versão mais atual, um abraço

Hallan disse...

Muito bom o exemplo e bem explicativo. Obrigado.

Uberdam Cavaletti disse...

Olá Marcelo, estou utilizando a versão 2.1.4 do CodeIgniter. Tudo funciona normal até a parte do artigo 2, onde era para ser exibido os dados na view.

Quando coloco aquele php de criação da table, nada é mostrado na view. Alguma dica, alguma coisa que posso usar para encontrar o erro. ?

Obrigado

Marcello Benigno disse...

Uberdam, habilite a visualização de erros no php.ini, acredito que o seu PHP não está habilitado para o PostgresSQL. Um abraço.