Back-End

17 ago, 2009

Sistemas de Temas do CakePHP

Publicidade

Recentemente o Google lançou uma funcionalidade de alteração de temas da interface do seu WebMail. Isto me fez lembrar que eu tinha visto algo sobre temas no CakePHP. Motivado pela inclusão desta funcionalidade no Gmail e triste por não poder usufruir (ainda), escrevo este artigo explicando como trabalhar com temas no CakePHP.

O sistema é relativamente simples e é composto somente de uma adição nas convenções de pastas e arquivos. Na verdade, vamos ter que fazer algumas alterações no nosso Controller, mais isso já era esperado, não é?

A grande sacada é a adição de novos PATHs de procura. Com o sistema de temas acionado, o CakePHP irá procurar primeiro nas pastas relacionadas aos temas, caso não encontre, ele procura nas pastas normais. Portanto, acredito ser algo bem simples de implementar temas nas aplicações, até mesmo em já existentes.

Primeiro vou ensinar como acionar o sistema de temas em sua aplicação. A modificação tem que ser feita no seu Controller, portanto o mais sensato é colocar no seu AppController. Os dois atributos que devem ser alterados são o Controller::theme e Controller::view, ficaria algo como:

class AppController extends Controller {
    // Habilita os temas
    var $view = 'theme';
    // Seleciona o tema
    var $theme = 'azul';
}

Com isto, sua aplicação já estará habilitada a utilizar os temas, agora é só entender a convenção de pastas. Todos os temas deverão estar na pasta themed dentro da pasta view. Para cada tema, deverá existir uma pasta com o seu respectivo nome. Dentro desta pasta, é só seguir a convenção padrão, pasta com nome do Model no plural, arquivos .CTP correspondente à action, elementos dentro das pasta elements e arquivos de layout dentro da pasta layouts. Ficaria algo assim:

- app
    \- views
    |   \- themed
    |   |   \- tema_1
    |   |   |   \- elements
    |   |   |   \- controller1
    |   |   |   |   \- action1.ctp
    |   |   |       \- action2.ctp
    |   |   |   \- controller2
    |   |          \- action1.ctp
    |   |   \- tema_2
    |   |   |   \- elements
    |   |   |   \- controller1
    |   |   |   |   \- action1.ctp
    |   |   |       \- action2.ctp
    |   |   |   \- controller2
    |               \- action1.ctp
    |   \- elements
    |   \- controller1
    |   |   \- action1.ctp
    |       \- action2.ctp
    |   \- controller2
            \- action1.ctp

Só que um sistema de temas não estaria completo se nós não pudéssemos mudar os arquivos que ficam no webroot, na verdade os mais importantes para alterar um tema! Mas a idéia é a mesma, uma pasta chamada themed, pastas com o nome do tema e dentro, as pastas padrões do webroot, como: css, js, img, etc..

Vocês podem encontrar um pouco de documentação no Book do CakePHP, mais informações no blog PseudoCoder.com e se ainda não estiver satisfeito, pode olhar o blog rodoTelmi.