Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera ...
Vi que muitos gostaram do 2 últimos cursos que eu criar sobre classes então aqui vai mais 1 o 3° da série classes
Bem eu vi recebi varias mensagens via MP para continuar o curso aqui e a pedidos então vamos para a 3° fase da série classes, Então para esse 3° curso iremos um sistema de notícias usando classes
Então bora começar !!
Antes de mais nada vamos verificar o que nosso sistema vai fazer. Para isso vamos dividir o sistema em modulo.
Então iremos ter as seguintes modulos.
NOTÍCIA DESTAQUE
VISUALIZAR NOTICIA POR COMPLETA
LISTAR NOTICIAS
Então galera no momento nosso sistema vai ser simples então vai ter somente esses 3 modulos ok?
Bem então vamos lá iremos agora modelar nosso banco de dados para podermos fazer o negocio funcionar ^^
Para esse sistema eu defeni o seguinte modelagem de banco de dados:
Notícias
id add + || titulo varchar(60) || descricao varchar(150) || conteudo text || fonte varchar(60) || fonte_link varchar(100) || data date() || visivel boolSQL_NOTICIA.sql
CREATE TABLE noticias (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,titulo VARCHAR( 60 ) NOT NULL ,descricao VARCHAR( 150 ) NOT NULL ,conteudo TEXT NOT NULL ,fonte VARCHAR( 60 ) NOT NULL ,fonte_link VARCHAR( 100 ) NOT NULL ,data DATE NOT NULL ,visivel BOOL NOT NULL) ENGINE = innodb;Bem já temos nosso DB formatado e pronto para receber o conteúdo.
Agora vamos programar:
Vamos criar uma classe que vai navegar no banco de dados atraz das informações que queremos ..
Não irei criar uma classe DB porque por enquanto não é viavel criarmos ela porque não é? porque é algo mais avançado e se queremos uma classe legal então acho que seria ideial criar uma aula só para essa classe ;) então aqui vou montar uma classe normal sem extender uma outra classe que no nosso caso iria ser a do DB
<?php/ Classe responsavel para trabalhar com a notícias V. 0.1 =P /class noticia{ }?>Bem aqui já iniciamos a nossa classe noticia. agora vamos colocar as propriedades nela
Sabemos que as propriedades da classe são suas carecteristicas principais onde colocamos algumas informações importante para ela.
Como assim informações inmportante?
R: Bem imagina que criamos uma classe HUMANO, quais as suas propriedades importate de um ser HUMANO?
--- Dormi
--- Acordar
--- Comer
--- Beber
--- ....
Certo deu para entender? Então se tivesemos uma classe HUMANO teriamos essas propriedade como importates de nossa classe ;)
Agora voltando ao assunto.
As propriedades importantes para a nossa classe seriam o seguinte:
--- tabelaNOME -> tabela em que nossa classe vai está trabalhando
--- db -> o que será responsavel para guardar as informações que iremos fazer de SQL
Agora vamos adicioanr elas:
<?php/* * Classe responsavel para trabalhar com a notícias * V. 0.1 =P */class noticia{ var $tabelaNoticia = "noticia"; var $defaultRowsPages = 5; var $db;}?>Bem nossas propriedades colocadas e já com seus valores.
Agora vamos para a primeira função que seria uma função contrutora é o que vai conectar o banco de dados mais antes da função vamos criar alguns defines com as configurações do DB e depois criamos a função constructer que ao iniciarmos a classe ela será executada.
<?php/* * Classe responsavel para trabalhar com a notícias * V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{ var $tabelaNoticia = "noticia"; var $defaultRowsPages = 5; var $db; function noticia(){ $connect = mysql_connect(DBHOST,DBUSER,DBPASS); mysql_select_db(DBDATABASE,$connect); }}?>Pronto vocês devem ter reparado que a nossa função tem o mesmo nome de nossa classe certo? isso quer dizer que é uma função construtor. no PHP5 isso não é mais necessario porque? R: porque no php5 já existe um __constructor que é para essa finalidade
Agora já sabemos que ao iniciar a nossa classe ele vai conectar ao banco sozinho e ao terminar o script ele desconecta o banco pois o mysql_connect ele desconecta depois que um script é terminado. diferente do mysql_pconnect
Agora vamos criar a função que será responsavel de listar as noticias.
<?php/* * Classe responsavel para trabalhar com a notícias * V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{ var $tabelaNoticia = "noticia"; # informa a tabela de noticias. var $db; # variavel que vai conter informações das pesquisas de query function noticia(){ $connect = mysql_connect(DBHOST,DBUSER,DBPASS); mysql_select_db(DBDATABASE,$connect); } function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){ $this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset"); if(mysql_num_rows($this->db)){ while($linhas = mysql_fetch_array($this->db)){ $ar[] = $linhas; } return $ar; }else{ return false; } }}?>
Bem ta ai montamos nossa listar noticia que é o ** return array() ** getNoticia([rows], [offset], [array( campo,(DESC|ASC) )], [bool]); ela é responsavel para listar nossas notícias com ela já matamos 2 de nossos 3 modulos. os seguites:
NOTÍCIA DESTAQUE
LISTAR NOTICIAS
Porque?
R: Porque nela podemos listar as noticias e tbm ela está retornando um array com os nomes dos campos da tabela e com isso você tem como ter a opção de listar só alguns e tbm listar só o ultimo ^^ ;)
ficando assim:
<?php/* * Classe responsavel para trabalhar com a notícias * V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","sis_noticias");class noticia{ var $tabelaNoticia = "noticia"; # informa a tabela de noticias. var $db; # variavel que vai conter informações das pesquisas de query function noticia(){ $connect = mysql_connect(DBHOST,DBUSER,DBPASS); mysql_select_db(DBDATABASE,$connect); } function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){ $this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset"); if(mysql_num_rows($this->db)){ while($linhas = mysql_fetch_array($this->db)){ $ar[] = $linhas; } return $ar; }else{ return false; } }}$noticias = new noticia();$destaque = $noticias->getNoticia(1); # lista 1 noticia.print_r($destaque[0]);$listarNoticia = $noticias->getNoticia(5,1); # lista 5 noticia. apartir da 2° linha sendo que o 0 é a primeira linhaif($listarNoticia){ foreach($listarNoticia as $valor){ echo "<br />Titulo: " . $valor[0]["titulo"] . "<br />\r\n"; }}?>Virão como é facil? ^^ simples não matamos 2 numa tacada só
Agora vamos fazer ele mostrar a noticia por completa
Vamos criar a função showNoticia(); ficando da seguinte forma.
<?php/* * Classe responsavel para trabalhar com a notícias * V. 0.1 =P */define("DBHOST","localhost");define("DBUSER","root");define("DBPASS","");define("DBDATABASE","noticias");class noticia{ var $tabelaNoticia = "noticias"; # informa a tabela de noticias. var $db; # variavel que vai conter informações das pesquisas de query function noticia(){ $connect = mysql_connect(DBHOST,DBUSER,DBPASS); mysql_select_db(DBDATABASE,$connect); } function getNoticia($row,$offset,$campos="*",$order="data",$nivel="DESC",$visivel=true){ $this->db = mysql_query("select " . $campos . " from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "' order by " . $order[0] ." " . $order[1] . "limit $row, $offset"); if($nr = mysql_num_rows($this->db)){ while($linhas = mysql_fetch_array($this->db)){ $ar[] = $linhas; } return $ar; }else{ return false; } } function showNoticia($id=false,$visivel=true){ if($id){ $this->db = mysql_query("select * from " . $this->tabelaNoticia . " where visivel = '" . $visivel . "'"); if(mysql_num_rows($this->db)){ return mysql_fetch_array($this->db); }else{ return false; } }else{ return false; } } }$noticias = new noticia();$destaque = $noticias->getNoticia(1,0); # lista 1 noticia.print_r($destaque);$listarNoticia = $noticias->getNoticia(5,0); # lista 5 noticia. apartir da 2° linha sendo que o 0 é a primeira linhaif($listarNoticia){ foreach($listarNoticia as $valor){ echo "<br />Titulo: " . $valor["titulo"] . "<br />\r\n"; }}$show = $noticias->showNoticia(1); print_r($show["titulo"]);?>
Certo galera ... agora é só usar um pouco a imaginação e logicas que vcs chegam longe.. isso aqui é o basico do basico ^^ só para ter uma noção melhor ;)
Até a proxima
Parabéns por esse tuto e estou aguardando a quarta parte hein!!!
E aí Perfect Lion... beleza...Rapaiz eu tava tampando o Cérebro de Fumaça, tentanto fazer uma Classe para paginação e buscando ajuda olha com q me deparo...Vlw... Kra...Vou adapar a sua Classe na minha de Conexão e adicionar a parte de Paginação...Brigadão pela aula...Abraços...
Grande Erick!!Ando meio sem tempo de passar aqui no forum da imastes mas parei para ver agora e achei muito 10.Meus parabéns garato.Sucesso!
faz uma 4ª parte porque está ótimo.
Amigo, seguindo seu tutorial, apareceu o erro:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/restricted/home/abestado/public_html/classes/noticias.php on line 29Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/restricted/home/abestado/public_html/classes/noticias.php on line 29Na linha 29 tem isso:if($nr = mysql_num_rows($this->db)){Detalhe:Após cansativas tentativas de consertar, copiei o seu código e colei nessa página, mudando apenas os endereços de banco de dados, banco, senha, etc. Inseri uma notícia no banco, para ver se aparecia, mas não, dá o erro.Pode me dar uma luz do pode estar ocorrendo?Obrigado,
cara... sem noção... meus parabéms LINDO tuto... eu n sabia nada de class (e ainda quero faze algo neh sem sabe isso q é facil sahusahu husahusaahusahusa)vlw mesmo li todos hj e ja to entendendo perfeitamente VLWaté
cara, você pode me ajudar nesse tópico sobre referências de variaveis métodos e classes(n intendo nada... só variaveis mesmo... xD~):
http://forum.imasters.com.br/index.php?showtopic=201287
valeu irmão!