Codeigniter 2 – Templates e Layouts

11

Posted by flaviosilveira | Posted in CodeIgniter, Php, Programação em geral | Posted on 26-05-2011

Fala pessoal!

O que mais gera acessos aqui no Blog são os artigos sobre Codeigniter, e principalmente a parte de layouts. É o artigo Habilitando Layouts no CodeIgniter (Template Engine) que está dividido em parte 1 e parte 2.

Como esse artigo tem mais de um ano, resolvi dar um upgrade nele com algumas observações.

Desde que ele foi escrito temos algumas novidades. A principal dela é  o lançamento de uma versão crítica do Codeigniter. Mas não se preocupe, a mecânica do artigo continua funcionando.
Apenas atente para alguns detalhes.

Preste atenção para a parte do seu controller:

  • Agora ele extende da classe CI_Controller e não mais da classe Controller.
  • Agora você não tem de ter mais um método construtor com o mesmo nome da classe. Pode arrancar fora aquilo sem medo.

Outros:

  • No tutorial anterior há uma correção porque eu tratava minha pasta system diferente do convencional. Com a ajuda e os comentários de vocês, foi feita uma correção que está no final do post. Agora na versão 2 está tudo ok. A pasta system vem separada da pasta application.
  • Na versão 2 temos agora arquivos .htaccess, arquivos de configuração, dentro das pastas application e da pasta system. Dentro deles há uma regra para recusar qualquer coisa que tentar acessar a pasta. Certifique-se que, em caso de colocar seus arquivos de estilo, ou seus arquivos javascript dentro de application por exemplo, alterar essa regra no .htaccess.

Então você pode seguir normalmente o tutorial, apenas adapte os detalhes citados acima.
Está com dificuldades ou preguiça? Clique aqui para baixar um exemplo com Layouts em cima do Codeigniter 2.

É isso galera. Abraço!!

Be Sociable, Share!

Comments (11)

[...] Atenção!! Este artigo foi escrito em cima da versão 1 do Codeigniter. Para detalhes de como usar com a versão 2 do framework clique aqui. [...]

Olá, não sei se podem me ajudar, mas sou programador Java a 4 anos, e estou estudando PHP..
começei a usar o codeignator a uns 2 dias para estudar.. Achei esse blog no google enquanto procura sobre como fazer templates, gostei da solução mas ela me causou uns problemas com o cache do CI ($this->output->cache(n)) e com o meu helper de assets. Fiz algumas alterações mas não sei se são a melhor opção..

Para poder utilizar meu asset helper, na classe Layout.php eu alterei o criador de css e js para chamar meu helper ficando assim:

$html .= “”;

e no metodo init, para poder utilizar o meu cache,
ao inves de dar um echo no layout e fiz:
$CI->output->set_output($view);
$CI->output->_display();

Valeu pelo tutorial.

Ficou bugado ali.. mas no criador de css e js eu basicamente chamo o helper:
[...] asset_url() . $links[$i] [...]

Muito bom esse post. Eu havia ficado na versão 1.7 do Codeigniter e esse foi uma boa dica para me atualizar. []´s

Caro Flavio,

tinha pegado seu script e dado uma melhorada nele para fazer algumas coisas a mais que precisava, quando ví que você utiliza o hook point display_override.
Seria bom explicar nesse seu tutorial que a função display da classe core Output é rescrita pelo seu código, e várias coisas são perdidas. Coisas como: cache, parser das variáveis {elapsed_time} e {memory_usage}, compressão gzip para browsers que aceitam páginas entregues com esse cabeçalho, a função $this->output->set_header(), profiling e a possibilida de utilizar o objeto _output em um controller.

Valeu!

Muito bom o post. Porém fiz download desta versão 2 com o layout montado, só que não consigo retirar o “index.php” da url, como faziamos na versão 1.7

Fiz as alterações normais:

-> $config['index_page'] = ”;

-> e a criação do .htaccess na raiz

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

Algo a mais para ser mudado nesta versão? Obrigado.

Estava com o mesmo problema, então consegui resolver assim:

RewriteEngine On
RewriteBase /codeigniter/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|scripts|css|robots\.txt)
RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L]

Estou com um problema, se eu tiver no meu controller uma função que apenas me retorna valores em JSON, ele aparece com o código da template junto.
Como faço para não vir isso:

Flávio,
é só setar o template para nulo.

Resolvido, é só setar o layout como vazio, mas não há um modo de sobrescrever as classes de view e parser para eles mesmos setarem o layout?

Não me faz sentido isso ser setado na View.
No controller, como é nesse exemplo, parece fazer mais sentido.

Post a comment