Classe Template Parser
Esta classe lhe habilita analisar sintaticamente (to parse) pseudo-variáveis contidas dentro de seus arquivos View. Ela pode analisar simples variáveis ou pares de tag variáveis. Se você nunca usou um template engine, pseudo-variáveis se parecem com isto:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
Esas variáveis não são variáveis PHP na verdade, mas apenas representações em texto puro, que lhe permitem eliminar o PHP de seus templates (view files).
Nota: o Code Igniter não requer que você use esta classe, pois usar PHP puro em suas páginas view as deixa rodar um pouco mais rápido. No entando, alguns desenvolvedores preferem usar um template engine se estiverem trabalhando com designers, que podem ter dificuldades em trabalhar com PHP.
Note também: A Classe Template Parser não é uma solução à toda prova. Nós a mantivemos bem concisa em seu propósito, para manter máxima performance.
Inicializando a Classe
Como a maioria das classes no Code Igniter, esta é inicializada, em seu controller, usando a função $this->load->library:
$this->load->library('parser');
Uma vez carregada, seu objeto estará disponível usando: $this->parser
As seguintes funções estão disponíveis para esta biblioteca:
$this->parser->parse()
Esta variável aceita um nome e uma array de dados de um template como entrada, e gerar a versão analisada (parsed). Exemplo:
$this->load->library('parser');
$dados = array(
'titulo_blog' => 'Meu Título do Blog',
'cabecalho_blog' => 'Meu Cabeçalho do Blog'
);
$this->parser->parse('blog_template', $dados);
O primeiro parâmetro contém o none do arquivo view (neste exemplo, o arquivo poderia se chamar blog_template.php), e o segundo parâmetro contém a array associativa com os dados a serem substituídos no template. No exemplo acima, o template conteria duas variáveis: {titulo_blog} e {cabecalho_blog}
Não é preciso dar "echo" ou fazer outra coisa com os dados retornados pela $this->parser->parse(). Eles são automaticamente passados à Classe Output que dará saída para o browser. No entando, se você quiser os dados retornados, no lugar de enviá-los à Classe Output, pode passar TRUE (booleano) para o terceiro parâmetro:
$string = $this->parser->parse('blog_template', $dados, TRUE);
Pares de Variáveis
O exemplo acima permite que simples variáveis sejam substituídas. Mas e se você quiser que um bloco inteiro de variáveis seja repetido, com cada interação contendo valores novos? Considere o exemplo que mostramos no topo da página:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
No código acima, você notará o par de variáveis: {blog_entries} dados... {/blog_entries}. Neste caso, o montante de dados entre estes pares seria repetido múltiplas vezes, correspondendo ao números de linhas em um resultado.
A análise sintática de pares de variáveis é feita usando o mesmo código parar analisar variáveis simples mostrado acima, exceto que você adicionar uma array multidimensional correspondente aos dados do seu par de variáveis. Considere este exemplo:
$this->load->library('parser');
$dados = array(
'blog_title' => 'Meu Título do Blog',
'blog_heading' => 'Meu cabeçalho do Blog',
'blog_entries' => array(
array('title' => 'Título 1', 'body' => 'Conteúdo 1'),
array('title' => 'Título 2', 'body' => 'Conteúdo 2'),
array('title' => 'Título 3', 'body' => 'Conteúdo 3'),
array('title' => 'Título 4', 'body' => 'Conteúdo 4'),
array('title' => 'Título 5', 'body' => 'Conteúdo 5')
)
);
$this->parser->parse('blog_template', $dados);
Se os dados do seu "par" estão vindo de um resultado do banco de dados, que já é uma array multidimensional, você pode simplismente usar a função de resultado de banco:
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$dados = array(
'blog_title' => 'Meu Título do Blog',
'blog_heading' => 'Meu cabeçalho do Blog',
'blog_entries' => $query->result_array()
);
$this->parser->parse('blog_template', $dados);