Já foram apresentadas três etapas da mencionada revisão, que começou no artigo Tutorial para fazer uma aplicação de teste em CodeIgniter e embora pudéssemos dizer que criamos uma aplicação suficiente para revisar esses novos conceitos, logicamente, ainda temos muitas outras coisas para aprender. Neste sentido, e motivados por um dos comentários de usuários enviados nos artigos, vamos mostrar a maneira de criar um sistema simples para implementar o que chamaríamos um layout para o site.
A ideia é criar uma visão que sirva para definir uma estrutura de página que seja comum para todo o site e claro, que se possa personalizar para mostrar dados diferentes em cada página. A estrutura do site atuará como layout e marcará o desenho da página.
É de supor que nosso propósito não será novo para as pessoas que possam ler este manual, uma vez que o trabalho com layouts é algo que quase todos os desenvolvedores realizamos em algum momento. Neste artigo o que faremos será colocarr em funcionamento uma possibilidade de esquema de trabalho quando quisermos criar layouts, que vimos no artigo anterior, em uma aplicação web desenvolvida com CodeIgniter.
Por um lado teremos a função index() (quando se acessa o controlador sem especificar que artigo mostrar, que apresentava uma listagem de artigos) e por outro lado a função mostra() (que recebe o identificador do artigo a ser mostrado).
Na função index() agora teremos invocação a duas visões. Por um lado está a visão "listagem_artigos", que serve para gerar o corpo da página. Esta visão não se imprime diretamente na tela ao ser processada quando se carrega, senão que é devolvida e salva como dado para ser enviada à visão principal. Por outro lado teremos a visão "layout_artigo", que contém o layout geral do site, à que enviamos diversos dados incluído o corpo da página gerado com a visão anterior.
Na função mostra() teremos também duas visões . Por um lado uma visão chamada "corpo_artigo", que tampouco se imprime, mas que simplesmente salvamos sua saída em uma variável. Por outro lado temos a visão "layout_artigo", que contém o layout do site, igual que na função index().
class Artigos_layout extends Controller {
function index(){
//carrego o helper de url, com funções para trabalho com URL do site
$this->load->helper('url');
//carrego o modelo de artigos
$this->load->model('Artigo_model');
//peço os ultimos artigos ao modelo
$ultimosArtigos = $this->Artigo_model->dame_ultimos_artigos();
//crio o array com dados de configuração para a visão
$dados_visão = array('rs_artigos' => $ultimosArtigos);
//carrego a visão passando os dados de configuração
$dados_layout["corpo"] = $this->load->view('listagem_artigos', $dados_visao, true);
$dados_layout["titulo"] = "Portada da aplicação de artigos";
$this->load->view('layout_artigo', $dados_layout);
}
function mostra($id){
//carrego o helper de url, com funções para trabalho com URL do site
$this->load->helper('url');
//carrego o modelo de artigos
$this->load->model('Artigo_model');
//peço ao modelo o artigo que se deseja ver
$arrayArtigo = $this->Artigo_model->dame_artigo($id);
//comprovo se recebi um artigo
if (!$arrayArtigo){
//não recebi nenhum artigo
//vou lançar um erro 404 de página não encontrada
show_404();
}else{
//encontrei o artigo
//mostro a visão da página de mostrar um artigo passando os dados do array do artigo
$dados_layout["corpo"] = $this->load->view('corpo_artigo', $arrayArtigo, true);
$dados_layout["titulo"] = $arrayArtigo["titulo"];
$this->load->view('layout_artigo', $dados_layout);
}
}
}
?>
Agora poderíamos ver o código das distintas que utilizamos neste controlador.
<html>
<head>
<title><?=$titulo?></title>
</head>
<body>
<div style="background-color: #ffffcc; padding: 10px 20px; font-size:200%;">
Cabeçalho aplicação de artigos
</div>
<div style="padding: 15px;">
<?=$corpo?>
</div>
<div style="background-color: #ccc; padding: 10px 20px; font-size:80%;">
Pé de página | link | link de rodapé 2
</div>
</body>
</html>
<h1>Listagem de artigos</h1>
<p>Estes são os últimos artigos publicados.</p>
<?php
while ($fila = mysql_fetch_array($rs_artigos)){
echo '<p>';
echo '<a href="' . site_url('/artigos_layout/mostra/' . $fila['id']) . '">' . $fila['titulo'] . '</a>';
echo '</p>';
}
?>
<h1><?=$titulo?></h1>
<blockquote><b><?=$titulo?></b></blockquote>
<?=nl2br($corpo)?>
<p><a href="<?=site_url("/artigos_layout/")?>">Voltar</a></p>
Poderíamos colocar em funcionamento este novo exemplo acessando o controlador criado nesta ocasião. Como o controlador é novo, temos que acessar com uma URL que indique seu nome. Algo como isto:
http://localhost/index.php/articulos_plantilla