XOOPS Brasil

 

Prefácio

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...