Idéias para organizar seus CSS e auto-carregá-los no CakePHP

Bom pessoal, neste post, vou passar algumas idéias que tive no que diz respeito a organização dos arquivos CSS de um projeto desenvolvido no Cake. Tem algumas idéias bem pensadas e umas "meio porcas" também... :)

Primeira idéia: arquivos CSS's sem vínculo com os nomes dos controllers.

Neste modo, os arquivos seguem uma nomenclatura totalmente diferente da dos controllers. O que não é recomendado, senão você vai perder muito tempo dizendo: "Como eu chamei mesmo o CSS da página de leitura de uma notícia?:)".

Para usar esta técnica vamos fazer o controller definir qual CSS ele deseja usar, então vou criar uma variável $CSS que irá armazenar qual arquivo CSS será usado. Então, por exemplo, um controller de notícias:

PHP:
  1. class NoticiasController extends AppController
  2. {
  3. var $name = 'Noticias';function index(){
  4. $this->set("CSS", "indicedenoticias");
  5. }
  6. function ler($idString){
  7. $this->set("CSS", "lernoticia");
  8. }
  9.  
  10. }

Perceba que setamos uma variável CSS para cada método, e que os nomes dos arquivos (CSS) não tem relação nenhuma com os métodos.

Agora no nosso layout default, dentro da tag head:

PHP:
  1. if(isset($CSS)){
  2. echo $html->css($CSS);
  3. }
  4. ?>

No layout, fazemos uma verificação para sabermos se foi setado o $CSS, se sim, mandamos incluir.

Esta é uma maneira porca, ok? :)

Segunda Idéia: CSS com o mesmo nome do controller

Neste modo, os arquivos CSS seguirão a mesma nomenclatura dos controllers, ou seja, um controller Noticias terá uma arquivo CSS noticias.css. Assim teremos um projeto muito mais organizado, e acharemos facilmente um CSS, pois sabemos que seu nome estará ligado a um controller.

Agora, não precisaremos fazer nada no controller, apenas no layout.

PHP:
  1. echo $html->css($this->params["controller"]);
  2. ?>

Para sabermos qual o nome do controller que chamou o layout, estamos usando a variável $this->params, que entre outras informações bem úteis, armazena o nome do controller ($this->params["controller"]). Se você quiser saber todas as informações armazenadas em params, faça um teste e coloque um:

PHP:
  1. print_r($this->params);

Simples não? rs

Terceira Idéia: CSS com o mesmo nome do controller, somente se o CSS existir

Este na verdade é um avanço da segunda idéia, apenas verificaremos se o arquivo CSS existe antes de incluí-lo. Coisa que já deveríamos ter feito desde o primeiro método.

PHP:
  1. if (is_file(APP.WEBROOT_DIR.DS ."css".DS.$this->params["controller"].".css")){
  2. echo $html->css($this->params["controller"]);
  3. }
  4. ?>

Note que para montar o caminho completo até o arquivo usamos várias constantes, veja a lista de significados:

  • APP : guarda o caminho completo da aplicação atual. Por exemplo: c:\testeCake\app\
  • WEBROOT_DIR : o nome do diretório webroot. Isso porque podemos mudá-lo, mas o padrão é webroot mesmo.
  • DS : ou Directory Separator, guarda qual barra será usada. Barra invertida para windows e barra normal para *nix.

Este método já é bem mais organizado, além de fazer as verificações necessárias. Ideal para ser usado se você tiver toda formatação dos dados gerados por um controller em um único arquivo.

Quarta Idéia: um CSS para cada método de um controller

Está idéia, creio ser a mais coerente, organizada e "bonita" de ser usada. Por quê? Pelo simples fato de separarmos os CSS para cada método.

Novamente só iremos alterar o layout:

PHP:
  1. if (is_file(APP.WEBROOT_DIR.DS ."css".DS.$this->params["controller"]."_".$this->params["action"].".css")){
  2. echo $html->css($this->params["controller"]."_".$this->params["action"]);
  3. }
  4. ?>

Neste exemplo, estamos usando a seguinte padronização para os arquivos CSS: nomedocontroller_método.css e já estamos verificando se o CSS existe e só o incluímos se isso acontecer.

Quinta idéia: um CSS para cada método do controller, um pouco mais organizado

Esta idéia é quase idêntica a anterior, mas ao invés de colocarmos todos os CSS no mesmo diretório, teremos um diretório para o controller dentro de webroot/css/ e dentro desse diretório, os arquivos CSS de cada método.

Vejamos o exemplo:

PHP:
  1. if (is_file(APP.WEBROOT_DIR.DS ."css".DS.$this->params["controller"].DS.$this->params["action"].".css")){
  2. echo $html->css($this->params["controller"]."/".$this->params["action"]);
  3. }
  4. ?>

Perceba que só trocamos o "_" (underline) pela barra.

Assim se tenho um controller chamado Noticias e um método chamado ler, será incluído, se existir, o arquivo: /css/noticias/ler.css.

Esta última, eu creio ser a mais bem organizada.

Bom pessoal, é isso. Qualquer dúvida ou sugestão, comentem! Abraços...

2 Comentários »

  1. Allan said,

    Janeiro 29, 2007 @ 23:05

    Cara, meu CSS padrão não aparece na tela inicial do cake como no seu tutorial, tem alguma configuração de servidor necessaria pra instalar o cake ? to usando o apache com php5.0

    Valeu!

  2. tulio said,

    Janeiro 30, 2007 @ 00:13

    Fala Allan,

    então depende... Aquele estilo padrão ele é mantido enquanto o layout default está sendo usado. Quando cria-se um novo, você deve adicioná-los manualmente.

    É esse o problema?

    Abraços,

RSS feed for comments on this post · URI do TrackBack

Deixe seu comentário