CodeIgniter Template Parser Class

22 de agosto de 2011, em Passos Iniciais, por

CodeIgniter Template Parser Engine Class: imagem ilustrativa

Vimos no artigo “Models, Views e Controllers trabalhando juntos no CodeIgniter” como é feita a “passagem” de dados numa aplicação em CodeIgniter e como se faz para exibir informações nas views.

Bem, esse é o método “tradicional” de se trabalhar nas views, mas não o único! Já existe no CodeIgniter, nativamente, uma maneira de deixar os views mais enxutos e facilmente inteligíveis; uma maneira de exibir dados mais fácil e rapidamente; e essa maneira é usar a Template Parser Class do CodeIgniter!

O que é a Template Parser Class

A Template Parser Class é uma classe nativa do CodeIgniter que permite usar o sistema de “parser” em pseudo-variáveis nas views. Se você ainda não trabalhou com template engines, então veja a nítida diferença entre exibir dados assim:

1
2
3
4
5
6
<h1><?php echo $title ?></h1>
 
<?php foreach($posts as $p): ?>
    <h1><a href="/blog/<?php echo $p->slug ?>"><?php echo $p->title ?></a></h1>
    <?php echo $p->content ?>
<?php endforeach ?>

E assim:

1
2
3
4
5
6
<h1>{$title}</h1>
 
{posts}
    <h1><a href="/blog/{slug}">{title}</a></h1>
    {content}
{/posts}

E aí, qual você prefere? ;-)

Como usar a Template Parser Class do CodeIgniter

Se você gostou dessa maneira “diferente” de apresentar seus dados nas views, saiba que é muito simples começar a usar a Template Parser Class!

Primeira, você deve carregar a biblioteca (ou configurar para auto carregar, como conta no artigo) de parser:

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

No controller

Tomemos um controller fictício para exemplificar o uso do parser. Primeiro carregamos a library (caso não esteja auto carregada), pegar os dados do model, normalmente, mas, ao invés de darmos um load em alguma view usando $this->load->view(), chamamos o “método-base” da Template Parser Class:

1
2
3
4
5
6
7
8
9
10
11
12
// Carrega Template Parser Class
$this->load->library('parser');
 
// Carrega um model de Blog qualquer
$this->load->model('Blog_model');
 
// Pega algumas informações do BD	
$data['title'] = 'Blog de Testes do CodeIgniter';
$data['posts'] = $this->Blog_model->get_posts(5);
 
// Chama a view "parseada"
$this->parser->parse('blog_index', $data);

Perceba o seguinte neste método:

  • Primeiro parâmetro. É o nome da view que se deseja “parsear” (“blog_index”).
  • Segundo parâmetro. Dados enviados para o “parseamento” ($data).

Dessa maneira, como foi visto no início do artigo, é possível usar a seguinte sintaxe para exibição de dados nas views:

1
2
3
4
5
6
<h1>{$title}</h1>
 
{posts}
    <h1><a href="/blog/{slug}">{title}</a></h1>
    {content}
{/posts}

Veja que, para as variáveis simples, não é preciso echo(), print() ou qualquer função de exibição que seja. Basta envolver o nome da pseudo-variável entre colchetes que funciona! Para sets de resultados vindos do BD ou algum array multidimensional de dados, nos quais, para cada iterador, há valores diferentes a serem exibidos, basta “abrir” e “fechar” o par de pseudo-variáveis, tal como consta no exemplo.

Há um terceiro parâmetro, booleano, opcional, que pode ser usado para, ao invés de já enviar as pseudo-variáveis para serem exibidas, retorna o valor do “parseamento” para ser usado de alguma outra forma na view:

1
$this->parser->parse('blog_index', $data, TRUE);

E existe, também, um método para parsear strings ao invés de views. Caso queira saber mais a respeito, veja o método $this->parser->parse_string() na documentação oficial.

Conclusão sobre o template engine do CodeIgniter

Como foi visto, usar o template engine do CodeIgniter para fazer o parser de pseudo-variáveis nas views é bastante simples e intuitivo. Além de reduzir o tamanho do código e poupar tempo de escrita, o código fica tão fácil de entender que até os designers conseguirão realizar pequenas manutenções em views! ;-)

É uma template engine básica, sem maiores recursos de outras mais poderosas que podemos encontrar por aí, mas, até para CI existem recursos de terceiros que aprimoram isso. Provavelmente estes serão mostrados em artigos futuros, não percam!

É verdade que há um consumo de recursos ligeiramente mais elevado do que se não estivéssemos usando um echo(), mas isso não é considerável para projetos pequenos e médios, então a Template Parser Class pode ser usada sem preocupações!

18 comentários em "CodeIgniter Template Parser Class"

gravatar

Netofire  em 22 de agosto de 2011

Parabéns novamente pelo blog. Gostaria de sua opinião sobre usar este método ou o Smarty, visto que são parecidos. No framework que estou desenvolvendo inseri o smarty no CI, com ótimos resultados. O que acha?

gravatar

Daniel Polito  em 23 de agosto de 2011

Muito bom post, e parabéns pelo blog. Acho o parser do CI meio fraco, para lidar com arrays e etc… Uso e recomendo o Dwoo.

Abracos

gravatar

Tárcio Zemel  em 23 de agosto de 2011

O Smarty, sem sombra de dúvidas, é bem mais poderoso! Se o projeto estiver pedindo mais recursos de parser, continue com ele.

gravatar

Tárcio Zemel  em 23 de agosto de 2011

Sim, o Dwoo possui bem mais recursos que o parser default. Futuramente, pretendo fazer um tuto sobre como instalar e usar ele no CI. ;-)

gravatar

Jonas  em 15 de setembro de 2011

Como envio objetos para a view?

gravatar

Tárcio Zemel  em 16 de setembro de 2011

Dê uma olhada em “Passando informações para views” do artigo sobre views no CodeIgniter.

Abraços!

gravatar

RodolfoNogueira  em 26 de dezembro de 2011

Excelente artigo companheiro! Ajudou muito a todos nós! Abraços
Rodolfo Jorge Nemer Nogueira
UFPR – Música Curitiba Paraná

gravatar

Denes  em 21 de janeiro de 2012

Parabéns pelo post! Simples, direto e eficiente.

gravatar

Tárcio Zemel  em 25 de janeiro de 2012

Obrigado! Abraços!

gravatar

Marcelo Fabiano  em 22 de fevereiro de 2012

Adorei o post sobre Parser mto bom ! Queria saber como utilizar Matriz utilizando Parser pois tenho projeto q necessito a utilização de uma matriz q tenho passar para uma view

gravatar

Tárcio Zemel  em 24 de fevereiro de 2012

Obrigado, Rodolfo! Apareça!

gravatar

Tárcio Zemel  em 24 de fevereiro de 2012

No artigo mostra como, Marcelo, é só jogar numa estrutura "{posts} … {/posts}".

gravatar

Artesanato  em 15 de março de 2012

Ainda estou em aventurando no WordPress e tenho gostado de ler sobre tudo relacionado a códicos. Vou aind avasculhar este blog e suas sugestões. Obrigado.

gravatar

Rodrigo Spalidoro  em 17 de março de 2012

Legal ainda não conhecia o parser, mas não uso vou usar nos meus projetos, já é dificil colocar uma funcao e fazer o fazer load da biblioteca em outra, os programadores com pouca instrução ficam perdidos se a funcao é nativa do CI ou fui eu que criei, fica melhor colocar o $ e mostrar que são variaveis em php. confunde menos, os colegas de trabalho.

gravatar

Tárcio Zemel  em 19 de março de 2012

WordPress…?

gravatar

Alexandre  em 22 de julho de 2012

tambem tem um helper para template não oficioal mas bem bacana

gravatar

Emílio Vieira  em 23 de novembro de 2013

CRUDS. Se for necessário editar usando um mesmo template, e neste estiver um DropDown(verificar o value selected), pra fazer um if-statement complica um pouco né…

gravatar

Luiz  em 12 de maio de 2014

como posso fazer a verificação se existe ou não ex:
if(true)
{
$data["msg"] = "OI"
}
ai o retorno e false, e não cria o $data["msg"] = oi;

    Comente!