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...
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:
Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.
Felipe, não era bem isso que eu estava dizendo não.
Vc foi um pouquinho além. Mas um pouquinho bem grande
Cara, muito bom.
Vou fuçar um pouco nele e qualquer dúvida/sugestão eu volto.
Abs
Putz!
Show de bola, e eu quebrando a cabeça de como montar isso
[]´s
Olá Felipe,
Seguinte, usei seu exemplo e funcionou perfeito só que ao lançar num site meu, a view não está carregando automaticamente.
Então verifiquei que o problema é na configuração do $application_folder.
Se colocar o path completo, dá um erro “Unable to load the requested file: welcome.php”
Olha só o retorno da função “_direct_file($path)” do seu hook:
Sem o path completo (’system’)
string(17) “welcome/my_layout”
Com o path completo (/home/coyote/httpdocs/felipedieseloriginal/application
string(7) “welcome”
Vc poderia dar uma ajuda para contornar isso ?
Abs
Felipe, meu problema foi resolvido alterando o seguinte no hook:
1) function Layout()
Alterei
$this->view = $this->_direct_file(APPPATH . ‘/views’);
para
$this->view = $this->_direct_file(APPPATH . ‘views’);
Obs.: o ‘/’ não é necessário, senão na url fica ‘//views’
2) function _direct_file($path)
comentei a linha:
//$path = dirname(FCPATH) . ‘/’ . $path;
abs