Como usar o Template Parser no CodeIgniter

No Padrão MVC, a camada V, de View, serve para mostrar o resultado para o usuário, ou seja, para exibição, então, entende-se que ali deve-se ir nada ou muito pouco de PHP, e somente HTML, CSS, JavaScript, etc.

Porém, geralmente não é isto que ocorre.

Se no controller nós temos uma listagem vinda do banco de dados que deve ser mostrada na view, precisaremos iterar este resultado vindo do banco e mostrar isto ao usuário, geralmente usando o famoso foreach do PHP, ou seja, neste caso estamos colocando PHP dentro da View.

Quando o uso do PHP na view é pequeno, até podemos relevar, mas ocorrem casos onde o programador acaba transferindo toda a lógica de negócios pra view, enchendo de IFs e ELSES no HTML deixando ele totalmente poluído e de difícil entendimento.

Se para o programador que está fazendo o site é difícil às vezes entender o que ele mesmo fez, imagine para um Designer, que só trabalha na parte visual do site e que geralmente não entende lhufas de programação.

Por isso, o CodeIgniter traz pra gente o Template Parser, que tem como função substituir por chaves {} grande parte dos códigos PHP colocados na View.

Tenha em mente que o Template Parser não faz milagres, ou seja, você vai provavelmente se encontrar em alguma situação onde terá que usar PHP na View, e, inclusive, você deve ficar atento se isto ocorrer, pois muitas vezes isto pode indicar que há algo errado na sua lógica e você está tentando fazer tudo em um lugar só, na View.

Uma grande ajuda também ao usar o Template Parser é como mencionei acima. Se na sua empresa existem os departamentos de Design e de Programação, ao diminuir consideravelmente a quantidade de código PHP dentro das suas Views, você facilitará bastante a vida daquele designer que não é obrigado e sacar de códigos PHP. Isso só já seria um motivo suficiente para você começar a adotar o Template Parser nos seus códigos.

Bom, vamos a um exemplo simples.

Imagine que na sua view existem 3 variáveis com os nomes:

$titulo, $bem-vindo e $clientes, sendo que este último é uma listagem de clientes onde serão mostrados o Nome e E-mail do cliente.

O primeiro passo é carregarmos a biblioteca Parser no CodeIgniter.

Você pode carregá-la automaticamente via config/autoload.php ou então, como é feito neste exemplo, carregá-la no __construct do Controller. Assim ela ficará disponível para qualquer método dentro deste controller que queira utilizá-la.

Crie uma função dentro do controller Welcome.php como segue abaixo:

Agora no método index do seu controller Welcome, coloque o código abaixo:

Note que a única diferença aqui em relação a utilização de uma view comum é como faremos a chamada à view.

Em vez de usarmos: $this->load->view(‘welcome_message’, $variaveis); iremos chamar o parser do CodeIgniter que irá substituir as variáveis pelos seus respectivos valores, então, você deverá digitar assim:

O próximo passo agora é prepararmos a View para trabalhar com as variáveis usando o Parser.

Veja um trecho do código da view abaixo:

Repare como que devem ser escritas as 3 variáveis que o controller está nos enviando.

A primeira variável é o título do site, note que basta você colocar o nome da variável entre os símbolos { e }, sem precisar colocar o $ do PHP.

Isso já é suficiente para que o Parser do CodeIgniter substitua o conteúdo destas variáveis pelos valores vindos do controller.

A lógica para o bem-vindo é a mesma.

Mas o mais importante é você entender como que funciona o equivalente ao foreach do PHP.

Note que no controller foi criada uma array onde cada índice é um outro array que tem dois índices e seus valores.

Veja que a variável {clientes} possui um código de fechamento {/clientes} e entre eles você repete o nome dos índices de cada array criada dentro da array Clientes.

Volte acima e veja novamente o código para entender melhor.

O resultado disto será algo parecido com a imagem abaixo:

print_parser_ci

Com isto, você já consegue resolver 99% dos problemas de listagem de dados na sua view, e deixando seu código mais limpo e fácil de entender além de dar uma facilitada na vida do seu designer.

Tenha em mente que o Parser consome um pouco mais de recursos do seu servidor, e isto pode causar certa lentidão no seu site. Dependendo do tamanho do seu site isto pode ser insignificante, mas se for algo muito grande, vale a pena testar antes.

Se você quiser usar um template parser mais poderoso, pode dar uma brincada com o Twig. Futuramente pretendo fazer um post sobre ele, mas por enquanto, deixo por sua conta.

Por hoje é só pessoal, dúvidas e sugestões, use a área de comentários abaixo.

Fabio

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.

  • Júlio

    Parece interessante… vou testar.

  • lennonsbueno

    Obrigado ajudou muito 🙂

  • douglas88

    Toda a vez que vou usar este método $this->parses->parse() , a minha view é carregada 2 vezes…

  • Douglas, será que você não está chamando o $this->load->view() em seguida? Lembre-se que o parser substitui o load->view. Você não deve usar os dois comandos.

    Abraços

  • douglas88

    O problema era este mesmo Fábio, obrigado.

    Mas estou com um problema então, porque em outro momento do meu script eu necessito passar outras variáveis diferentes a minha view, tanto o load quanto o parser acabam carregando ela toda de novo.

    Existe alguma forma de eu somente passar os parametros a view sem ter de carregá-la de novo ?

    Desde já obrigado.

  • Acredito que a única forma de fazer isto sem recarregar toda a página seja usando ajax, pois aí você consegue fazer o que quiser sem precisar recarregar a página novamente.

  • Fabricio Caceres

    é possível utilizar If nesse com parse ? Pois estava vendo e não encontrei nada. Caso não seja é possivel utilizar parse e PHP junto ?

  • Olá Fabrício.

    O template parser do CI é bem simples e não suporta condicionais no código. A explicação deles é que foi feito assim para deixar as coisas bem simples.

    Talvez na versão 4.0 venha algo mais avançado.

    Valeu

  • Fabricio Caceres

    Já que ele não possui, poderia estar utilizando php junto com parse, por exemplo :
    {titulo}

  • Sim, você pode usar PHP junto no código HTML sem problemas, deixando o parser somente para trabalhar com variáveis e loops.

    Fabio