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:
public function __construct() { parent::__construct(); $this->load->library("parser"); }
Agora no método index do seu controller Welcome, coloque o código abaixo:
public function index() { $variaveis['titulo'] = 'Bem-vindo ao meu site'; $variaveis['bem-vindo'] = 'Olá, tudo bem?'; $variaveis['clientes'] = array( array( 'nome' => 'José', 'email' => 'jose@email.com' ), array( 'nome' => 'Pedro', 'email' => 'pedro@email.com' ), array( 'nome' => 'Maria', 'email' => 'maria@email.com' ), array( 'nome' => 'Carlos', 'email' => 'carlos@email.com' ), array( 'nome' => 'Manoel', 'email' => 'manoel@email.com' ), ); $this->parser->parse('welcome_message', $variaveis); }
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:
$this->parser->parse('welcome_message', $variaveis);
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:
<html> <head> <meta charset="utf-8"> <title>{titulo}</title> </head> <body> <div id="container"> <h1>{bem-vindo}</h1> <div id="body"> {clientes} <p>Nome: {nome}, Email: {email}</p> {/clientes} </div> </div> </body> </html>
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:
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