Até agora temos visto como funciona a parte de caching do Smarty com exemplos que parecem vir da documentação(muitos na verdade são bem parecidos). Ainda existem mais algumas coisas que não são tão obvias assim para se se estudar. Esse pedaço final do artigo visa explicar essas.
Se você navegar até os outros artigos, perceberá que até o momento trabalhamos somente com um template (arquivo.tpl). Uma das propriedades mais interessantes do cache do Smarty é a capacidade dele trabalhar de forma independente com vários arquivos.
Vamos voltar um pouco ao Smarty para ter certeza de que entendemos o que eu acabei de dizer:
O Smarty gerencia templates, assim, você pode separar seu template em blocos. Vamos dizer que você tenha a seguinte estrutura:
Cabeçalho, menu da esquerda, chamada de artigos, chamada de eventos, rodapé.
Embora sua página seja uma só, você pode monta-la a partir de vários bloquinhos no Smarty.
Você teria arquivos como:
cabecalho.tpl, menu.tpl, chamadaArtigos.tpl, chamadaEventos.tpl e rodapé.tpl.
Note que não estamos usando um index.tpl neste exemplo. Muita gente iria criar um index.tpl e incluir as diretrizes de include nele. No nosso caso todos controles de exibição são feitos no index.php usando o metodo display().
Voltando ao caching, como já deve ser imaginável, se você está controlando o display de cada área, você também pode controlar o cache de cada área de forma independente. Por exemplo, o cabecalho.tpl, rodarpá.tpl e menu.tpl podem ter um cache de longa duração, os eventos podem ser atualizados a cada hora e os artigos podem ser atualizados manualmente a cada vez que se insere um novo.
Desta forma, temos uma única página, que sozinha tem vários controles de cache diferentes.
Não vou mostrar o exemplo completo de um código como esse, porque ele vai bem além do escopo deste artigo, mas vamos mostrar algumas das partes relacionadas ao cache.
O site de artigos e eventos.
Temos nossos TPLs montados e funcionando. Por preferência pessoal, gosto de separar os arquivos que controlam cada TPL em arquivos independentes. Assim, para cada TPL tenho um arquivo PHP que faz todas as buscas de banco, controle de cache, etc…
Nosso index.php vai acabar ficando +- assim:
<?php
/* includes diversos para que tudo funcione direito
* incluindo o include do Smarty, banco, etc…
*/
include(’cabecalho.php’);
include(’menu.php’);
include(’chamadaArtigo.php’);
include(’chamadaEventos.php’);
include(’rodape.php’);
?>
Bem simples na verdade. A index essêncialmente se encarrega de chamar todos os objetos e métodos necessários para que tudo funcione corretamente (que eu geralmente separo em um único arquivo para que eu possa fazer somente um include na Index).
Cada arquivo controla sua própria exibição, por exemplo o cabecalho:
$Smarty->cache_lifetime = 3600;
if(!$smarty->is_cached(’cabecalho.tpl’)){
//…
}
$Smarty->display(’cabecalho.tpl’);
E assim por diante.
Um bloco um pouco diferente é o bloco de artigos. Você pode notar na descrição da funcionalidade acima que eu disse que o bloco deveria ser renovado somente quando um artigo novo é publicado. Assim, o controlador do template não tem controle sobre a renovação do artigo, não usamos o lifetime para determinar quando o template deve ser limpo.
O que de fato fazemos é, no admin, quando rodamos a rotina de publicar o artigo, forçamos a limpeza do cache desse bloco.
No arquivo de publicarMateria.php, colocaríamos além de todos os controles de insert em banco e etc…, também uma chamada de Smarty similar a essa:
$Smarty->clear_cache(’chamadaArtigo.tpl’);
(note que a página publicar matéria não precisa estar sendo controlada via Smarty para usar o objeto Smarty, basta que ele tenha uma referência ao objeto).
Bom, falamos muito sobre o cache, mas ainda não concluímos todas as coisas que existem. Como este artigo visa apenas melhorar o seu entendimento de como utilizar o cache do Smarty, não vou entrar em detalhes de tudo que é possível e nem de todas as outras funcionalidades associadas ao cache do Smarty. De uma forma geral, com o conhecimento que você adquiriu nesses artigos, você já tem a faca e o queijo na mão.
A regra básica de programação ainda permanece verdadeira, planeje suas ações. Desenhe, pense, estude , teste e só depois, faça.
Bom galera, qualquer coisa, só me mandar suas dúvidas ou sugestões. O LiveJournal não tem form de e-mail, então basta ir pro http://bugz.doutromundo.com
e usar o de lá.

