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

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