Views no CodeIgniter

10 de maio de 2010, em Passos Iniciais, por Tárcio Zemel

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.php');
$this->load->view('body.php');
$this->load->view('includes/footer.php');

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! ;-)

6 comentários em "Views no CodeIgniter"

gravatar

Matheus  em 19 de maio de 2010

Bacana o post!!!!

[Responder]

Tárcio Zemel Reply:

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

[Responder]

gravatar

Abdullah Al Mamun  em 25 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.
:-)

[Responder]

Tárcio Zemel Reply:

@ 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!

[Responder]

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

[Responder]

Tárcio Zemel Reply:

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! :-)

[Responder]

Comente!