Views no CodeIgniter

10 de maio de 2010, em Passos Iniciais, por

Views no CodeIgniter

Relembrando nossa saga de explicações básicas, vimos como é o funcionamento do padrão MVC, os controllers (e como funciona o esquema de URLs no Codeigniter em função dos controllers) e models. Chegou, então, o momento de estudarmos um pouco sobre  views no CodeIgniter!

Views no CodeIgniter

Como foi mostrado no referido artigo sobre Model – View – Controller,

View é a apresentação, é o que aparece, é o que é visualizado por quem usa o sistema. É no View que as informações, sejam elas quais forem e de de qual lugar tenha vindo, são exibida.

No artigo sobre controllers, foi dado o exemplo de uma função matemática que, conforme o URL passado, soma 2 números e exibe o resultado em tela através da função echo(). Mas o exemplo foi somente para ilustrar como é o funcionamento geral dos controllers. Na prática, tudo o que se vai mostrar a quem utiliza o site/software deve ser feito através de views!

Afinal de contas, o padrão MVC foi criado para, justamente, manter em “compartimentos separados” a lógica do aplicativo, o contato com os dados usados e a exibição de o que quer que seja a quem o utiliza. Portanto, views foram idealizados para exibirem todas as informações/processamento que ocorra entre models-controllers. Reforçando: tudo deve ser exibido através de views!

Para ficar claro, podemos dizer que as principais funções de um view, através de invocações de métodos e ventos, são:

  • “Renderizar” (exibir) informações vindas dos models/controllers;
  • Requisitar atualizações aos models/controllers;
  • Enviar ações de usuários (através de inputs) a models/controllers;

Cada vez mais é possível observar a eficiência e praticidade do padrão MVC e perceber que cada um preciso e trabalha em conjunto ao outro. Models, Views e Controllers, cada um tem uma razão de existir e desempenha um papel diferentes, todos em conjunto para viabilizar um desenvolvimento eficiente e organizado.

Funcionamento de Views no CodeIgniter

Seguindo a “linha” dos outros artigos, este tópico deveria ser “Estrutura de um View no CodeIgniter”, mas os views são formados simplesmente por XHTML e CSS. Views são a parte que é vista pelos visitantes/usuários, e, na web, isso é desenvolvido e apresentado usando as respectivas linguagem de marcação e folhas de estilo. Então, views podem ser uma página completa ou um fragmento de uma página, como um cabeçalho, um rodapé, uma barra lateral e assim por diante.

Vamos, então, passar a alguns pontos referentes ao funcionamento de views no CodeIgniter.

Armazenamento de Views

Os views devem ser armazenados em application/views. Simplesmente dê um nome a seu view e armazene neste diretório – muitos views são diretamente ligados a um controller; sendo este o caso, ou não, é importante dar nomes aos views que remetam facilmente a qual função ou conjunto de funções ele está refere. Por exemplo: application/views/about.php

Também é possível estruturar e refinar mais a organização de views. O CodeIgniter permite que se criem subníveis de diretórios dentro do diretório padrão de views. Então, por exemplo, é possível armazenar arquivos de views em uma estrutura do tipo: application/views/includes/head.php ou application/views/blog/widgets/advertising.php.

Carregando um(a) view

Para carregar um(a) view em um controller:

1
$this->load->view('about'); // sem extensão, se for ".php"

Para o caso de organização em subdiretórios, basta especificar onde o view se encontra:

1
$this->load->view('includes/head.php');

Carregando múltiplos views

Para carregar múltiplos views, basta chamar um por linha e o CI faz a “montagem” em uma só exibição:

1
2
3
$this->load->view('includes/head');
$this->load->view('body');
$this->load->view('includes/footer');

Passando informações para views

É possível entender o poder do CodeIgniter e sua facilidade de uso ao se passar uma informação dinâmica para ser exibida em um view! Basta carregarmos essa informação em um array ou objeto e passar essa informação no momento de carregamento do view no controller. Por exemplo:

1
2
3
4
5
6
$data = array(
    'title'   => 'Sobre',
    'content' => 'Texto da página sobre',
);
 
$this->load->view('about', $data);
Ao usar objetos, as variáveis de classe são transformadas em elementos de array.

Nisso, as informações do array $data serão passadas ao view. Para exibir essas informações na view, simplesmente é preciso tratar como se cada um dos itens do array fosse uma variável à parte, da seguinte maneira:

1
2
<h1><?php echo $title ?></h1>
<p><?php echo $content ?></p>

Fazendo loopings nos views

Para fazer loopings em views, também é simples. Por exemplo, vamos supor que tenhamos carregado a seguinte informação em um controller:

1
2
3
4
5
$data['todo_list'] = array('Lavar os pratos', 'Limpar a casa', 'Ligar para a pizzaria');
 
$data['title'] = "Lista de afazeres";
 
$this->load->view('afazeres', $data);

Então, no respectivo view, teríamos:

1
2
3
4
5
6
7
<h1><?php echo $title ?></h1>
 
<ul>
    <?php foreach($todo_list as $item): ?>
        <li><?php echo $item ?></li>
    <?php endforeach ?>
</ul>

Existe, ainda, uma maneira de passar o “data” para os views como string puro. Mas, como isso não é tão comum de ser feito, fica para um próximo artigo, mais específico.

Conclusão sobre Views no CodeIgniter

Obviamente isso não é tudo o que se tem para saber sobre views no CodeIgniter. Mas esse “básico” sobre views, juntamente com o conteúdo sobre models e controllers, já passa uma noção bem legal sobre o poder do CodeIgniter.

Para quem não conseguiu juntar as peças sobre MVC no CodeIgniter, não se preocupe: no próximo artigo vamos colocar models, views e controllers para trabalhar juntos e você vai ver um dos motivos de porque o CodeIgniter é o melhor framework PHP! ;-)

21 comentários em "Views no CodeIgniter"

gravatar

Matheus  em 19 de maio de 2010

Bacana o post!!!!

gravatar

Tárcio Zemel  em 20 de maio de 2010

@ Matheus
Que bom que gostou, Matheus! Fique ligado no CodeIgniter Brasil para acompanhar a evolução dos artigos!

gravatar

Abdullah Al Mamun  em 24 de maio de 2010

Really very helpful article!
I have to read this blog via Google translator.
Will love to get regular articles.
Thanks a lot.
:-)

gravatar

Tárcio Zemel  em 25 de maio de 2010

@ Abdullah Al Mamun
Thank you, Abdullah! This blog is writing in brazilian portuguese, but I’m happy you translate that & that was usefull to you!

gravatar

Robson Martins  em 13 de julho de 2010

cara eu so tenho uma duvida como eu passo um objeto para a view ?

se eu faço deste jeito da erro

$data = new minhaClass();
$this->load->view(‘minhaView’, $data);

sabe como eu posso resolver isso ?

abraço

gravatar

Tárcio Zemel  em 20 de julho de 2010

Como consta no artigo, ao passar objetos para o view, as variáveis de classe são transformadas em elementos de array.

Depois comenta se funcionou! :-)

gravatar

rodolpho  em 31 de janeiro de 2011

Sou iniciante com o CI e estou com um problema preciso relacionar dois selects porém não consegui realizar isto através do CI alguem poderia me ajudar.

Preciso fazer um select e o valor dele jogar na condição WHERE do outro select.

gravatar

Tárcio Zemel  em 1 de fevereiro de 2011

Falou de forma genérica demais, mas, se consegui entender, creio que será mais fácil fazer isso com AJAX.

Abraços!

gravatar

Alexandre  em 27 de junho de 2011

Nossa muito bom o poste se eu soubesse do blog antes seria mais feliz

gravatar

Tárcio Zemel  em 2 de agosto de 2011

Haha! Agora você sabe! ;-)

gravatar

Joel Costa  em 15 de dezembro de 2011

Nossa, muito bom os posts! Tô aprendendo muito. Parabéns, belíssimo trabalho!

gravatar

Tárcio Zemel  em 15 de dezembro de 2011

Muito obrigado, Joel! Abraços!

gravatar

Paulo Linhares  em 5 de janeiro de 2012

Encantado com a simplicidade e riqueza na explicação ! Muito Bom…

gravatar

jose  em 11 de julho de 2012

Onde acho um bom livro ou tutorial do CI em português?

gravatar

William  em 11 de novembro de 2013

Olá, sei que estou desenterrando esse tópico, mas já não sei mais ao que recorrer, estou com um problema no meu sistema, quando o usuário insere um comentário na news eu teria que retornar para a tela da news, mas o problema é que a tela não atualiza, ou seja, o usurário tem que dar um F5, e quando ele faz isso ele reenvia os dados e insere duas vezes o comentário, tem algum jeito de fazer com que a tela seja atualiza após o comentário ser inserido, já tentei o redirect, mas eu preciso passar um array junto atualmente estou fazendo isso: $this->load->view('news', $data); Se puderem me ajudar agradeço desde já.

Comente!