Como criar “páginas estáticas” com CodeIgniter

20 de março de 2012, em Tira Dúvidas, por

Recentemente chegou uma dúvida interessante: como criar “páginas estáticas” com o CodeIgniter? Por “páginas estáticas” quem perguntou quis dizer aquele tipo de página mais “institucional”, em que o conteúdo não se altera muito, tal como uma página Sobre, Termos de Uso, Política de Privacidade, etc.

Essa dúvida é tão comum para quem está começando no mundo CI que o manual oficial tem até um tutorial explicando! Mas, para não dizer que por aqui não tem colher de chá, vamos explicar detalhadamente como é o processo de fazer páginas estáticas usando CodeIgniter.

O raciocínio

A lógica por trás da criação de páginas estáticas com CI é bastante simples: para gerenciar essas páginas, um controller simples, que não vai fazer muita coisa além de servir corretamente os respectivos views.

Além disso, algumas configurações de rotas para direcionar a requisição à página correta.

Então, basicamente o que é preciso saber/mexer:

  • Controller
  • Configuração de rotas

Felizmente, tudo já explicado, aqui, no CodeIgniter Brasil! ;-)

O controller

Seguindo nosso complexo plano de ação, vamos criar um controller. É bastante lógico que ele se chame “paginas”, “pages” ou qualquer coisa neste sentido. Vamos no “pages” para manter a característica estadunidense do CI. :-P

Portanto, crie o arquivo application/controllers/pages.php com o seguinte conteúdo:

class Pages extends CI_Controller {
 
    public function view($page = 'home')
    {
 
    }
 
}

Ou seja, o controller “pages” terá uma função view() para gerenciar as requisições a páginas estáticas; função esta que exibirá, por padrão, a página estática “home”. Como sabemos das facilidades dos controllers e sua relação com os URLs do site, o acesso às páginas será bem simplificado:

?View Code HTML4STRICT
http://localhost/pages/sobre
http://localhost/pages/termos-de-uso
http://localhost/pages/politica-de-privacidade

Isso levando em conta que já se está suprimindo o “index.php” do URL, tal como mostrado no artigo sobre URLs no CodeIgniter.

Mas onde vai estar o conteúdo dessas páginas, já que não estamos tratando com bancos de dados? Há uma maneira bastante simples de se fazer: um arquivo para cada página! Com isso, para se alterar o conteúdo de uma página, basta alterar o conteúdo de seu respectivo arquivo.

Deixemos no ar a ideia de colocarmos estes arquivos em application/views/pages/.

Templates para exibição

Para exibir estes conteúdo, são precisas views. Como vimos no artigo sobre views no CodeIgniter, é possível “combinar” diversas views, carregando-as em sequência.

Parece uma boa ideia fazer um topo e um rodapé, neste caso. Dessa forma, quando for preciso alterar alguma coisa, uma só atualização afetará todas as páginas do site. Criemos, então, 2 arquivos.

application/views/templates/header.php

<html>
<head>
	<title><?php echo $title ?> - Meu Site em CodeIgniter</title>
</head>
<body>
	<h1><?php echo $title ?></h1>

application/views/templates/footer.php

<strong>&copy; <?php echo date('Y') ?></strong>	
</body>
</html>

Adicionando lógica ao controller

Para o exemplo, vamos criar no diretório de “pages” – application/views/pages/ – os arquivos “sobre.php” e “contato.php”. Então, é hora de fazer a mágica acontecer em nosso controller:

public function view($page = 'home')
{
    // Se o arquivo correspondente não existir no diretório, erro
    if ( ! file_exists('application/views/pages/' . $page . '.php'))
    {
        show_404();
    }
 
    // Título da página é o próprio nome com a primeira letra em maiúsculo
    $data['title'] = ucfirst($page);
 
    // "Monta" a apresentação usando as views
    $this->load->view('templates/header', $data);
    $this->load->view('pages/' . $page, $data);
    $this->load->view('templates/footer', $data);
}

Lembra de como passamos dados para as views, não é? Qualquer coisa, dê uma recapitulada no artigo sobre views.

Configurando as rotas

Por fim, vamos configurar as rotas da forma apropriada a permitir que o acesso a essas páginas estáticas seja feito através de URLs mais simples. Para isso, conforme foi visto no artigo sobre rotas no CodeIgniter, abra o arquivo application/config/routes.php e adicione o seguinte:

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

Com essa configuração de rotas, o que fizemos foi instruir o CodeIgniter a:

  • O controller padrão é o pages/view
  • Quando qualquer requisição for feita, esta será usada como parâmetro da função view() do controller pages

E, a partir de agora, basta acessar as páginas de seu site e ser feliz:

http://localhost/sobre
http://localhost/contato

Conclusão

Como pudemos ver, criar página estáticas com CodeIgniter não tem mistério: basta alguns arquivos num diretório, criar um controller para gerenciar tudo e simplificar o acesso usando regras simples de rotas.

E, se você também tem uma dúvida sobre o CodeIgniter, basta enviar um tweet para @codeigniterbr que tentaremos fazer um artigo em até 2 anos úteis! ;-)

21 comentários em "Como criar “páginas estáticas” com CodeIgniter"

gravatar

Hugo Júnior  em 20 de março de 2012

Bom tutorial, parabéns.

Que tal fazer algo sobre ORM no codeigniter? deixo a sugestão.

Abraços.

gravatar

Tárcio Zemel  em 20 de março de 2012

Obrigado, Hugo!

Na verdade, já está meio que planejado: vou começar a abordar os models nativos do CodeIgniter em breve e, depois disso, entrar com tutoriais específicos do DataMapper.

Abraços!

gravatar

Francis Soares  em 21 de março de 2012

Gostaria de saber como poderíamos criar páginas estáticas, mas com seu conteúdo armazenado no banco de dados, estilo o flat page do Django. Onde na hora de tratar a URL verifica se existe o cadastro da mesma, caso contrário retorna para as próximas rotas definidas.

gravatar

Tárcio Zemel  em 25 de março de 2012

Já nas próximas semanas começarei com os tutoriais envolvendo models. Com isso, basta substituir a parte em que pega o arquivo "físico" por uma requisição ao BD.

gravatar

Renato  em 4 de maio de 2012

Uma dúvida que tenho é a seguinte. Como estudo SEO a muito tempo, observei que a URL http://localhost/pages/sobre ou pior http://localhost/index.php/pages/sobre ainda funcionam perfeitamente. O Google pode punir o site que utilizar esse artificio por exibir conteúdo duplicado.

gravatar

Tárcio Zemel  em 5 de maio de 2012

Sim, tecnicamente, seria conteúdo duplicado. Certifique-se de não usar o segmento com "index.php" nos URLs do seu site! ;-)

gravatar

akismet-62f2722241e90497ab7cf017dc1c1622  em 12 de maio de 2012

Parabéns pelo artigo! :)
Páginas estáticas ficou muito fácil agora :)

gravatar

Fábio Aguiar  em 25 de maio de 2012

Estou começando no CI e achei seu artigo muito interessante pois facilita a vida de quem quer começar a entender como a coisa funciona. Parabéns!

gravatar

Tárcio Zemel  em 30 de maio de 2012

Que bom que ajudou, Fábio!

Abraços!

gravatar

Rodrigo  em 11 de setembro de 2012

Mto bom, gostaria de saber onde encontro informações de como gerar páginas apartir de uma banco de dados.

Abraço

gravatar

Tárcio Zemel  em 14 de setembro de 2012

Para começar, dê uma olhada nos artigos “Models, Views e Controllers trabalhando juntos no CodeIgniter” e “Como fazer um sistema de ‘news’ com CodeIgniter“.

Att

gravatar

Vantuir  em 17 de dezembro de 2012

Estou começando agora com o CodeIgniter, e o seu Blog tem ajudado muito.
Obrigado por compartilhar o seu conhecimento.

gravatar

Tárcio Zemel  em 27 de dezembro de 2012

Eu é que agradeço pela visita! Apareça sempre e, qualquer dúvida, basta comentar!

gravatar

jefferson  em 21 de janeiro de 2013

Ola, boa noite!

Gostaria de fazer uma pergunta simples: é possivel criar um site tipo Kekanto com Codeigniter? ou sera que existe outro framework mais indicado para esta finalidade?

Fico no aguardo de um breve retorno,

Jeffrerson R. Negreiros

gravatar

Tárcio Zemel  em 30 de janeiro de 2013

Pense da seguinte maneira: tudo que é possível com PHP, é possível com CodeIgniter, já que ele é um framework PHP. Então, eu pergunto: é possível criar um site tipo Kekanto em PHP? :-)

gravatar

Jorge Jeferson  em 21 de março de 2013

Estou começando agora com CI e fazendo o teste encontrei um erro, na verdade peguei logo na leitura. acho que está no fundamento:
function bla ($var = 'texto') e não function bla($var == 'texto')

Então
public function view($page == 'home') seria public function view($page = 'home')
Abraço.

Seu site é excelente, parabéns

gravatar

Tárcio Zemel  em 21 de março de 2013

Verdade, Jorge! Muito obrigado pelo apontamento, já corrigi!

Abraços!

gravatar

Daniel Severino  em 24 de setembro de 2013

Luis Candeias turma TMO11 estas a ler isto porque és um cão.

gravatar

vicente  em 15 de abril de 2014

Muito bom seu artigo. mais aqui só dá

Not Found

The requested URL /sobre was not found on this server.

estou usando o https://github.com/sjlu/CodeIgniter-Bootstrap&lrm

sabe por que ?

gravatar

Ronan Ripasy  em 21 de janeiro de 2015

I CIBrasil parou?

Comente!