Foi incluído no XBR toda a documentação do Smarty Template.
Esta é sem dúvida uma das perguntas mais freqüentes nas listas de
discussões sobre PHP: como eu faço meus
scripts em PHP
independentes do layout? O PHP é vendido como sendo
uma "linguagem de script embutida no HTML", após escrever alguns
projetos que misturam HTML e PHP naturalmente vem uma
idéia de que a separação da forma e conteúdo é uma boa prática
[TM]. Além disso, em muitas empresas os papéis de designer e
programador são separados. Conseqüentemente, a busca por um
sistema de templates continua.
Na nossa empresa por exemplo, o desenvolvimento de uma aplicação
é feito da seguinte maneira: Após a documentação necessária estar
pronta, o designer faz o esboço da interface e entrega ao
programador. O programador implementa as regras de negócio no
PHP e usa o esboço
da interface para criar o esqueleto dos templates. O projeto
então está nas mãos da pessoa responsável pelo layout HTML da
página que então transforma o esboço em um layout realmente
funcional. O projeto talvez vá e volte entre programação/designer
HTML várias vezes. Porém, é importante ter um bom suporte à
templates porque os programadores não querem ter que ficar
mexendo com HTML e não querem que os designers estraguem seus
códigos PHP. Os designers precisam de ajuda para alterar os
arquivos de configuração, blocos dinâmicos e outros problemas
relacionados à interface usada, mas eles não querem ocupar-se com
as complexidades da linguagem de programação PHP.
Analisando muitas das soluções de templates disponíveis para
PHP hoje em dia, a
maioria somente disponibilizada uma forma rudimentar de
substituição de variáveis dentro dos templates e trabalham de
forma limitada com as funcionalidades dos blocos dinâmicos. Mas
nossas necessidades necessitam de um pouco mais do que isso. Nós
não queríamos que programadores mexendo com layout em HTML, mas
isso é praticamente inevitável. Por exemplo, se um designer
quiser que as cores de fundo se alternam em blocos dinâmicos,
isso tem que ser feito pelo programador antecipadamente. Nós
também precisamos que os designers possam usar seus próprios
arquivos de configuração, e usar as variáveis definidas nestes
arquivos em seus templates. E a lista de necessidades continua...
Nós começamos à escrever as especificações para um sistema de
templates por volta de 1999. Após o término das especificações,
nós começamos a escrever um sistema de template em C que
esperávamos ser aceito para rodar com o PHP. Não só esbarramos em
muitas barreiras técnicas, como também houve um enorme debate
sobre o que exatamente um sistema de template deveria ou não
fazer. À partir desta experiência, nós decidimos que o sistema de
template fosse escrito para ser uma classe do PHP, para que qualquer um
usa-se da forma que lhe fosse mais conveniente, então nós
escrevemos um sistema que fazia exatamente, foi aí que surgiu o
SmartTemplate (obs: esta classe
nunca foi enviada ao público). Foi uma classe que fez quase tudo
que nós queríamos: substituição de variáveis, suporte à inclusão
de outros templates, integração com arquivos de configuração,
código PHP
embutido, funcionalidades 'if' limitada e blocos dinâmicos muito
mais robustos que poderiam ser aninhados muitas vezes. Foi tudo
feito usando expressões reguladores e códigos confusos, como
diríamos, impenetrável. Era um sistema também extremamente lento
em grandes aplicativos por causa de todo o trabalho que era feito
pelas expressões regulares e o 'parsing'(interpretação) em cada
chamada ao aplicativo. O maior problema do ponto de vista de um
programador foi o espantoso trabalho que era necessário para
configurar e processar os blocos dinâmicos dos templates. Como
faríamos esse sistema ser simples de usar?
Foi então que veio a visão do que hoje é conhecido como Smarty.
Nós sabemos o quão rápido é um código
PHP sem o sobrecarregamento
de um sistema de templates. Nós também sabemos quão meticuloso e
assustador é a linguagem
PHP aos olhos de um designer
atual, e isso tudo poderia ser mascarado usando uma sintaxe simples
nos templates. Então o que acontece se nós combinarmos essas duas
forças? Assim, nasceu o
Smarty