Para o desenvolvimento do TekPT ficou decidido que dava jeito ter um sistema de templates facilmente alterável em vez de ter a apresentação misturada com o código e a solução a essa problema passou pela fantástica biblioteca Smarty que até agora tem sido excelente para as necessidades.
No entanto apesar da biblioteca ser excelente não deixa de ter alguns problemas nomeadamente no que toca a plugins e a questões de cache.
Aquando do desenvolvimento pensei em criar algumas tags para facilitar o código html, nomeadamente a criação de uma tag {block} para rapidamente colocar os headers de cada um dos elementos da barra lateral no entanto isso desponta um bug na cache do smarty. O problema é o seguinte: ao usar varios blocos idênticos num ficheiro com a cache activa o primeiro é correctamente executado enquanto todos os outros são substituidos por copias do primeiro. Não consegui encontrar qualquer solução para este problema tendo a solução recaido sobre o abandono da ideia.
Um outro problema semelhante deu-se aquando da criação do sistema de banners. O sistema é simples, coloca-se uma tag {banner type=”horizontal”} no template e esta é substituida por um dos ficheiros tpl de uma determinada pasta seguindo algumas regras. Os nomes do ficheiro devem ser do tipo “horizontal_title.tpl” onde claramente a primeira parte do nome do ficheiro é o type onde são utilizados e a segunda parte é meramente uma forma de organização. O código para isto é extremamente simples no entanto, durante o seu desenvolvimento, esbarrei novamente com o mesmo bug da ideia anterior. Por muito que eu desactivasse a cache do plugin este não actualizava a secção do template sem apagar os ficheiros de cache manualmente.
O problema reside na gestão de cache do smarty que aparentemente não funciona quando recebe um overwrite por parte do programador. Então, apesar de eu estar explicitamente a pedir para ela ser desactivada no meu plugin, esta não funcionava até que eu alterei o nome da função para smarty_function_banner (o que não seria necessário de acordo com o manual uma vez que o plugin estava a ser registado dinamicamente).
Agora tudo funciona correctamente mas fica o alerta não só para mim próprio como para todos os outros que desejem utilizar a biblioteca smarty no seu desenvolvimento. Fica a ressalva no entanto que estou a utilizar um objecto que estende a class Smarty() da biblioteca e que gere tudo o que tem a ver com Templates o que pode agravar o problema da cache (depende da forma como a biblioteca distingue se os plugins são dinâmicos ou não).