No artigo de hoje vou explicar como criar uma estrutura de diretórios organizada para seus módulos, temas e bibliotecas. Não será abordado como programar de forma organizada seus módulos e temas e não explicarei como utilizar os módulos features, strongarm e libraries, ok?
Ambiente utilizado para descrever esse artigo:
- Sistema Operacional Linux Mint 13 (Versão Ubuntu 12.04);
- Drupal 7.15;
- Drush versão 5.6.
Chega de conversa e vamos ao que interessa!
Como todos sabem, a forma de organização do Drupal, comparado com outros softwares, como o Magento, é sucinta. Se você quiser, pode fazer tudo dentro do arquivo .module e pronto. Realmente pode fazer, mas se um dia você partir dessa para melhor (espero que demore para acontecer), terão que contratar um medium para fazer uma consulta, pois se tornará impossível dar manutenção a esse projeto (rsrsrs).
Temos outros pontos bem incômodos quando falamos sobre desenvolvimento em Drupal com várias pessoas no mesmo projeto, produzindo insanamente módulos e features. Se você não utilizar as técnicas de modularização dos seus componentes e variáveis em features, o trabalho se tornará impraticável, pois você não irá conseguir replicar seu desenvolvimento para outros envolvidos no projeto, que provavelmente não estarão trabalhando ao seu lado.
Estão apavorados? Não fiquem! Para tudo isso tem uma solução.
Veja a imagem abaixo:
Note que na imagem acima temos três pastas, chamadas respectivamente de contrib, custom e fs.
Na contrib ficarão todos os módulos que virão do reposítório drupal.org. Já sei o que você deve estar pensando (rsrs):
“Quando eu executar o comando drush dl nomedomodulo, ele automaticamente colocará o módulo da comunidade na pasta site/all/modules/contrib?”
Mas é claro! Desde que você tenha criado esses diretórios antes de baixar qualquer módulo.
Veja na figura abaixo como é para ficar:
Para fazer uma estrutura dessas em projetos já desenvolvidos e que estão em produção, será necessário um outro artigo para explicar.
Pasta /sites/all/modules/custom
Nesse caminho ficarão todos os módulos desenvolvidos pela equipe do projeto. Uma boa prática que utilizamos aqui é que todos os nomes dos módulos criados pela equipe devem sempre começar com a palavra custom_ e o restante em inglês, por exemplo:
style="text-align: left;" align="center">custom_news, custom_ad, custom_profile_users e etc...
Dessa forma fica bastante claro quando alguém de fora do projeto for, um dia, dar manutenção no código-fonte e encontrar lá no meio uma função ou hook que é invocado por um “custom_”.
Veja abaixo como fica uma estrutura de diretórios como essa:
Pasta /sites/all/modules/custom/features
Este diretório é usado para armazenar todas as features criadas pela equipe durante o desenvolvimento do projeto.
Features, para quem não sabe, são módulos criados com intuíto de armazenar todas as configurações feitas dentro do Drupal e que, dessa forma, permite deixar versonável praticamente tudo. Reparem que eu deixei em negrito a palavra configurações. Pois é, quando eu disse configurações, pessoal, eu quis dizer tudo que não seja conteúdo. Então, nada de ficar gerando features com os conteúdos cadastrados; se vocês fizerem isso estarão fadados a ter uma grande dor de cabeça no futuro. Quem avisa amigo é! A boa prática é armazenar somente configurações.
Mais uma boa prática que utilizamos em nossos projetos, é o uso da sigla fs_ e o resto do nome em inglês. Dessa forma ficará muito fácil identificar o que é esta pasta.
Alguns exemplos de nomes e junto uma imagem para elucidar.
style="text-align: left;" align="center">fs_profiles, fs_users, fs_news, fs_products etc...
Da parte de módulos está fechado! Agora vamos partir para temas.
Pasta /sites/all/themes/contrib
Segue a mesma ideia dos módulos contrib. Todos os temas vindos da comunidade devem ser colocados nessa pasta, porém, nesse caso, após efetuar o download do tema, você terá que colocar manualmente esse tema nesta pasta. Será um esforço mínimo e um ganho enorme de organização no futuro.
Pasta /sites/all/themes/custom
Aqui a única diferença do custom de módulos é que o nome do seu tema pode ficar sem o “custom_” na frente, para evitar confusão.
Não se preocupe com caminhos relativos. Caso os temas tenham sido bem feitos você não terá problemas com caminhos de suas imagens e css.
A terceira e última estrutura que eu considero uma das mais importantes de se explicar.
Pasta /sites/all/libraries
Esse diretório deve ser utilizado para colocar bibliotecas de terceiros, que são necessários para permitir o total funcionamento de um módulo. Alguns exemplos de módulos que precisão disso:
Confira também na figura abaixo:
É muito importante quando você for instalar um novo módulo, ler tudo que está escrito na página dele e também ler o readme/install.txt. Caso o módulo que você fez download tiver uma biblioteca de terceiros dentro da pasta do módulo e o mesmo também não dizer que você pode colocar na pasta libraries, está ERRADO e também não está seguindo as boas práticas convencionadas pelo Drupal.
Para usufrir da melhor maneira dessa pasta instale o módulo libraries: http://drupal.org/project/libraries
Então é isso soldados! Espero que tenham gostado.
Artigo publicado primeiro no Drupal de Elite http://drupaldeelite.com.br/blog/como-criar-uma-estrutura-de-diretorios-organizada-para-seus-modulos-temas-e-bibliotecas