Felipe Diesel

Desenvolvedor de software

Foto de Felipe Diesel

Utilizando layouts no CodeIgniter

May 21, 2008 -

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:


class Main extends Controller {

  function Main()
  {
    parent::Controller();
  }

  function index()
  {
    $this->data->foo = $this->db->get('main_table');
  }

  function show()
  {
    $this->data->foo = $this->db->get('another_table');
    // Você pode definir manualmente a view e o layout da seguinte forma:
    $this->view = 'main/index';
    $this->layout = 'popup';
  }
}

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:


$hook['post_controller'][] = array(
  'class'    => 'Layout',
  'function' => 'view',
  'filename' => 'Layout.php',
  'filepath' => 'hooks',
  'params'   => array()
);

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