Como fazer um sistema de “news” com CodeIgniter

9 de abril de 2012, em Tutoriais, por

Como fazer um sistema de "news" no CodeIgniter: imagem ilustrativa

No artigo sobre como criar páginas estáticas no CodeIgniter houve uma dúvida: mas e se quiséssemos interagir com o banco de dados pra isso? Para sanar esta dúvida, portanto, vamos a um tutorial de como fazer um sistema de “news” usando o CodeIgniter!

Schema do sistema de news

Use o seguinte database schema para criar a tabela do exemplo deste artigo:

1
2
3
4
5
6
7
8
CREATE TABLE news (
    id int(11) NOT NULL AUTO_INCREMENT,
    title varchar(128) NOT NULL,
    slug varchar(128) NOT NULL,
    text text NOT NULL,
    PRIMARY KEY (id),
    KEY slug (slug)
);

A partir de agora, também é muito importante você ficar familiarizado com os métodos do Active Record (que, brevemente, terá seu nome trocado para Query Builder) Query Builder (antigo Active Record). Portanto, acesse a página do manual oficial que trata do Active Record e familiarize-se com os métodos de seleção, inserção, atualização e deleção de dados.

Por exemplo, vamos criar um método no model que permite pegar todas as news cadastradas ou pegar somente uma ao passar seu slug.

1
2
3
4
5
6
7
8
9
10
11
public function get_news($slug = FALSE)
{
    if ($slug === FALSE)
    {
        $query = $this->db->get('news');
        return $query->result_array();
    }
 
    $query = $this->db->get_where('news', array('slug' => $slug));
    return $query->row_array();
}

Configurando o model

Vamos configurar o model para nosso sistema de news. Ele será armazenado em application/models/news_model.php e será algo como:

1
2
3
4
5
6
7
8
9
<?php
class News_model extends CI_Model {
 
    public function __construct()
    {
        $this->load->database();
    }
 
}

Este código é semelhante ao código do controller usado no artigo sobre páginas estáticas. Ele cria um novo model que extende o CI_Model e carrega a library de banco de dados. Isso fará com que a classe de banco de dados esteja disponível através do objeto $this->db.

Mostrando as news

Agora que as consultas podem ser feitas, vamos partir para a exibição das news, fazendo a integração MVC. Crie o controller application/controllers/news.php, que terá o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
class News extends CI_Controller {
 
    public function __construct()
    {
        parent::__construct();
        $this->load->model('news_model');
    }
 
    public function index()
    {
        $data['news'] = $this->news_model->get_news();
        $data['title'] = 'News archive';
 
        $this->load->view('templates/header', $data);
        $this->load->view('news/index', $data);
        $this->load->view('templates/footer');
    }
 
    public function view($slug)
    {
        $data['news'] = $this->news_model->get_news($slug);
        if (empty($data['news_item']))
        {
            show_404();
        }
 
        $data['title'] = $data['news_item']['title'];
 
        $this->load->view('templates/header', $data);
        $this->load->view('news/view', $data);
        $this->load->view('templates/footer');
    }
 
}

E, agora, o arquivo de view que mostra todos os artigos, application/views/news/index.php, que terá o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
<?php foreach ($news as $news_item): ?>
 
    <h2><?php echo $news_item['title'] ?></h2>
 
    <div id="main">
        <?php echo $news_item['text'] ?>
    </div>
 
    <p><a href="news/<?php echo $news_item['slug'] ?>">Ver artigo</a></p>
 
<?php endforeach ?>

Por fim, o view que mostra a página de cada artigo, application/views/news/view.php:

1
2
3
<?php
echo '<h2>' . $news_item['title'] . '</h2>';
echo $news_item['text'];

Roteamento

Uma revisada no artigo sobre routes no CodeIgniter vai permitir uma configuração de rotas para facilitar o acesso aos artigos e aprimorar nosso sistema:

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

E, com isso, está pronto nosso sistema de news no CodeIgniter! Popule o banco com alguns registros e acesse http://localhost/news (depois de já ter removido o segmento “index.php”) para o ver em funcionamento.

Conclusão

Alguns estiveram impacientes por tutoriais mais práticos, como este, mas, até agora, os artigos da seção Passos Iniciais eram de suma importância.

Se você vem acompanhando o CodeIgniter Brasil, ao ver este tutorial completo, certamente não deve ter sentido dificuldade em acompanhar os conceitos e técnicas apresentados.

Valeu ou não a pena? ;-)

24 comentários em "Como fazer um sistema de “news” com CodeIgniter"

gravatar

Hugo Junior  em 9 de abril de 2012

Parabéns pelo tutorial, e parabéns pelo blog também que vem sendo uma das maiores e melhores referência nacionais ao CI.

Só uma pergunta não tão importante, onde fala sobre a mudança do nome Active Records para Query Builder?

Abraços.

gravatar

janesbr  em 13 de abril de 2012

Passei a acompanhar o "Codeigniterbrasil" porque o conteúdo é de qualidade. É muito difícil encontrar material bom sobre o framework CI, normalmente encontramos um sisteminha muito básico de login e mais nada. Espero que venha outros materiais bons para estudar. Valeu mesmo!

gravatar

Tárcio Zemel  em 16 de abril de 2012

Com certeza ainda trataremos de diversos assuntos além de "sisteminhas básicos", janesbr! Aguarde! ;-)

gravatar

Patricia Motta  em 19 de abril de 2012

Poxa, estou desenvolvendo justamente isso para minha loja, cara, não tem noção de como isso vai economizar nosso tempo. Estamos querendo montar um sistema de news proprio, para sair de ferramentas pagas e esse ai já é um startup enorme. Obrigado por compartilhar!

gravatar

Tárcio Zemel  em 25 de abril de 2012

Que bom que ajudou, Patricia, é pra isso, mesmo, que escrevo os artigos! :-)

Abraços!

gravatar

Francis  em 12 de maio de 2012

Só faltou passar um parâmetro inicial para a action::view, por exemplo NULL ou false,.
Assim se constrói uma aplicação livre de ataques xss, o básico mas vai servir ;p

gravatar

Luan  em 16 de maio de 2012

Ótimo site, me ajuda muito a aprender o framework;)

gravatar

Ednaldo Neimeg  em 24 de julho de 2012

Gosto muito deste espaço, estou aprendendo CI. Mas tenho algumas observações sobre o fluxo de informações neste post:

1- no primeiro script PHP o autor diz para criar um método no Model, mas… que model? Nenhum Model foi criado ainda… somente mais abaixo fica 'implícito' que se trata do news_model.php.

2- no load é feito o carregamento das páginas header.php e footer.php, mas em nenhum momento essas páginas foram criadas neste post. Em nenhum local deste post está explícito que este é uma continuação e/ou extensão do post sobre páginas estáticas, portanto se um iniciante acompanhar este post do início ao fim ele deveria conseguir exibir as News.

Continuarei acompanhando.

Obrigado.

gravatar

Tárcio Zemel  em 31 de julho de 2012

Então, Ednaldo, você não deixa de estar certo, mas, se em todos os posts, eu tiver que ficar referenciando todos os artigos básicos, isso tornaria a leitura desgastante…

Caso haja dúvidas mais básicas, a seção Passos Iniciais está aí para isso.

Obrigado!

gravatar

Mônica  em 31 de agosto de 2012

Tenho um site http://jogosdamonica.net.br/ feito em WP mais eu acho muito ruim na hora de colocar ou jogos, será que se fosse feito dessa forma ficaria mais fácil no momento de cadastrar os jogos.

gravatar

Tárcio Zemel  em 6 de setembro de 2012

Se passar pra CodeIgniter, vai ter que reestruturar tudo, Mônica… De repente você não está sabendo mexer no WordPress direito, porque ele é capaz de dar conta disso, sim. Dê uma olhadinha melhor para ver o que pode ser.

Abraços!

gravatar

mariorgrossi  em 21 de outubro de 2012

estou a mexer com ci ha pouco tempo e esses tutoriais estao ajudando muito. valeu mesmo.

gravatar

Tárcio Zemel  em 21 de outubro de 2012

Eu é que agradeço a participação, Mario! Abraços!

gravatar

Francisco  em 2 de novembro de 2012

Sou completamente iniciante nesse framework, fiz o exemplo do News e deu certinho.
Tentei trocar o News por Notícias, aí ferrou tudo, não encontrou as páginas, tentei voltar tudo para News e também não encontra nenhuma página.
O que foi feito de tão errado assim? http://loja.web19.com.br/index.php/news

gravatar

Tárcio Zemel  em 3 de novembro de 2012

Entrei no link que você passou para criar uma notícia e deu tudo certo… Você já consertou?

gravatar

Coelho  em 29 de abril de 2013

Uma sugestão seria colocar o fonte em um arquivo .zip na pagina. No caso de hoje alguma mudança no layout está fazendo diversas paginas do site estarem desconfiguradas.

gravatar

Tárcio Zemel  em 12 de maio de 2013

Para exemplos mais simples, acho que não tem necessidade de disponibilizar o fonte, Coelho. Mas, se for algo maior/mais complicado, com certeza.

Não entendi a segunda parte.

gravatar

Coelho  em 12 de maio de 2013

Não estavam sendo exibidos nenhum dos view code. Agora voltou a exibir. Infelizmente não dei um print para mostrar.

gravatar

Tárcio Zemel  em 12 de maio de 2013

O importante é que está tudo bem agora. :-)

gravatar

Anderson  em 21 de agosto de 2013

Cara, achei muito legal seu blog, parabéns!
Estou querendo montar um site e estou escolhendo um framework, não encontrei nada relacionado a isso, mas o CodeIgniter tem alguma funcionalidade de geração de código tipo o CakePHP (bake)? Pois acredito que isso também ajuda a ganhar um bom tempo de desenvolviment.

gravatar

Axel DG  em 25 de junho de 2014

O link do active record está quebrado.
Acho que o novo é http://ellislab.com/codeigniter/user-guide/databa

gravatar

Juliano  em 25 de julho de 2015

Sua explicação foi uma bosta!

gravatar

Ramon Cesar  em 13 de julho de 2016

Ola amigo. Me tira uma duvida. eu uso a versão 2.0 co codeigniter. para passar uma id na url para trazer mais detalhes de determinado objeto como foi o caso do seu exemplo com a cadeira de rodas. isso éobrigatorio fazer sempre? Só vai funcionar se eu fizer essa configuração no router?

É porque meu problema é parecido e não consigo resolver.

    Comente!