Arquivo de maio de 2008

Utilizando layouts no CodeIgniter

Na grande maioria dos sites e sistemas web é apenas modificado o miolo da aplicação, enquanto que o cabeçalho, rodapé, menu, etc. permanecem iguais. E utilizando o modelo MVC, normalmente para cada action do controller temos uma view correspondente, sendo que geralmente um controller: Main com uma action: index, terá a view main/index.php.

No Code Igniter teríamos que fazer tudo manualmente, já que não há como definir um layout que será carregado em cada view, nem esse carregamento automático.

Pelo menos não havia... :D

Criei um pequeno hook que faz esse serviço. Crie seu controller como abaixo:

PHP:
  1. class Main extends Controller {
  2.  
  3.   function Main()
  4.   {
  5.     parent::Controller();
  6.   }
  7.  
  8.   function index()
  9.   {
  10.     $this->data->foo = $this->db->get('main_table');
  11.   }
  12.  
  13.   function show()
  14.   {
  15.     $this->data->foo = $this->db->get('another_table');
  16.     // Você pode definir manualmente a view e o layout da seguinte forma:
  17.     $this->view = 'main/index';
  18.     $this->layout = 'popup';
  19.   }
  20. }

E ao acessar as duas actions a view main/index.php será chamada com os valores definidos na variável $this->data. Também será carregado o layout application/views/layouts/default.php na função index e application/views/layouts/popup.php na função show.

Download

Faça o download da hook ou de uma aplicação de exemplo (CI 1.6.2).

Instalação

Para utilizar este hook, copie o arquivo Layout.php dentro da pasta application/hooks/, defina a opção $config['hooks'] com true no config e adicione o seguinte no arquivo application/config/hook.php:

PHP:
  1. $hook['post_controller'][] = array(
  2.   'class'    => 'Layout',
  3.   'function' => 'view',
  4.   'filename' => 'Layout.php',
  5.   'filepath' => 'hooks',
  6.   'params'   => array()
  7. );

Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.