[php5] classe de news

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 616 fois - Téléchargée 29 fois


Contenu du snippet

Bon après Hametsu21, je poste la mienne.
Classe de news... utilisation très simple.

Je fais une étendu de classe (parce que j'ai la flemme de refaire ma classe pour ne faire qu'un bloc :p) à partir d'une classe abstraite. Simple à comprendre ca aussi :p

Allez zoup, le code :

Source / Exemple :


<?php
abstract class Objet {
 
// Propriété de connection à la base de donnée
 protected $db;
 
// Sortie des données de la classe
 public $output;

//* Initialisation de la connection à la base de donnée *//
 protected function __construct($dbInit = TRUE) {
 
  if ( $dbInit ) {
      $this->db = mysql::GetInstance();
  } else {
      $this->db = NULL;
  }
  
 }
 
//* Fait le vide de la mémoire *//
 public function __destruct() {
  unset($this->output);
 }
 
}
// Ca c'est juste la classe abstraite, voici la classe News :p
?>
<?php
class News extends Objet {

 public function __construct() {
  parent::__construct();
 }
 
// Supprime une news
// Retourne un booléen : TRUE/FALSE 
 public function DeleteNews($id) {

  $this->db->prepare('DELETE FROM news WHERE id = {1}', $id);
  $this->db->query();
  
  return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;

 }
 
 public function CountNews() {
 
  $this->db->query('SELECT COUNT(id) FROM news');
  $this->db->query();

  $data = $this->db->fetch_row();
  return ( (int) $data[0] );
  
 }
 
 public function GetUniqueNews($id) {
 
  unset($this->output);
  
  $this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news WHERE id = {1}',
                     $id);
  $this->db->query();
  
  $this->output = $this->db->fetch_array();
  
 }
 // $start => début de la requète 
 // $limit => Nombre d'enregistrement max
 // $comm => Active la récupération des commentaires ou non
 public function GetNews($start = 0, $limit = 30, $comm = 'count') {
 
  unset($this->output);
  
  switch ( strtolower($comm) ) {
  	       case 'count' :
                 $this->db->prepare('SELECT news.id, news.titre, news.resume, DATE_FORMAT(news.date,"%d-%m-%Y") as date , COUNT(commentaires.id) as count , DATE_FORMAT( MAX(commentaires.date), "%d/%m/%Y") as lastcomm FROM news LEFT JOIN commentaires ON news.id = commentaires.id_news GROUP BY news.id ORDER by news.id DESC LIMIT {1},{2}',
	                               $start, $limit);
			     break;
		   case 'no' :
                 $this->db->prepare('SELECT id, titre, content, resume, DATE_FORMAT(date,"%d/%m/%Y à %H:%i") as date FROM news ORDER BY id DESC LIMIT {1}, {2}',
	                               $start, $limit);
				 break;
		
  }
  $this->db->query();
  
   while ( $data = $this->db->fetch_array() ) {
		   $this->output[] = $data;
   }
   
 }
 
// Récupére les commentaires d'une news
// Retourne le nombre de commentaires
 public function GetComm($id, $start = 0, $limit = 10) {
  
  unset($this->output);
  
  $this->db->prepare('SELECT pseudo, content, ip FROM commentaires WHERE id_news = {1} ORDER BY id ASC LIMIT {2}, {3}',
                   $id, $start, $limit);
  $this->db->query();
  
   while ( $data = $this->db->fetch_array() ) {
           $this->output[] = $data;
   }
  
  return $this->db->num_rows();
   
 }
 
// Compte le nombre de commentaires d'une news 
 public function CountComm($id) {
 
  $this->db->prepare('SELECT COUNT(*) FROM commentaires WHERE id_news = {1}', $id);
  $this->db->query();

  $data = $this->db->fetch_row();
  return ( (int) $data[0] );
 
 }

// Ajoute un commentaire sur une news.
 public function AddComm($pseudo, $content, $id) {
  
  unset($this->output);
  
  $this->db->prepare("INSERT INTO commentaires (pseudo, content, id_news, ip, date) VALUES ('{1}', '{2}', {3}, '{4}', NOW() )",
	                  $pseudo, $content, $id, $_SERVER['REMOTE_ADDR']);
  $this->db->query();

   if ( $this->db->affected_rows() === 1 ) {
        $this->output = $this->db->insert_id();
		return true;
   } else {
        return false;
   }
   
 }

// Ajoute une news
// Retourne TRUE/FALSE en fonction de l'insertion dans la BDD 
 public function AddNews($titre, $resume, $content) {
 
  unset($this->output);
  
  $this->db->prepare("INSERT INTO news (titre, resume, content, date) VALUES ('{1}', '{2}', '{3}', NOW() )",
                      $titre, $resume, $content);
  $this->db->query();
  
   if ( $this->db->affected_rows() === 1 ) {
        $this->output = $this->db->insert_id();
		return true;
   } else {
        return false;
   }

 }
 
// Update une news
 public function UpdateNews($titre, $resume, $content, $id) {
 
  $this->db->prepare("UPDATE news SET titre = '{1}', resume = '{2}', content = '{3}' WHERE id = {4}",
                      $titre, $resume, $content, $id);
                      
   if ( $this->db->affected_rows() === 1 ) {
        $this->output = $this->db->insert_id();
		return true;
   } else {
        return false;
   }
 
 
 }
 
// Récupère l'ID qui va être inscrit dans la BDD
 public function LastIDNews() {
 
  $this->db->query('SELECT MAX(id)+1 FROM news');
  
  $data = $this->db->fetch_row();
  return ( (int) $data[0] ) ;
  
 }

// Fin d'objet 
 public function __destruct() {
  unset($this->output);
 }
 
}
?>
<?php
CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `titre` varchar(255) NOT NULL,
  `resume` varchar(255) default NULL,
  `content` text NOT NULL,
  `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM

// Le timestamp peut être changé par un INT(11) ou un champ DATETIME ou autre :)

CREATE TABLE `commentaires` (
  `id` int(11) NOT NULL auto_increment,
  `pseudo` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `date` datetime NOT NULL,
  `id_news` int(11) NOT NULL,
  `ip` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM

?>
<?php
// Utilisation :
$news = new News;
// Je récupère les 10 dernières news ainsi que le nombre de commentaire sur chaque news.
$news->GetNews(0,10,'count');
 foreach ( $news->output as $data ) {
   // $code à l'intérieur :)
   // Ca reste de la mise en page
 }
?>

Conclusion :


Voila, reste plus qu'à faire mumuse avec les autres méthodes.
Ca marche sur le même principe :
$news->method($args);
foreach ( $news->output as $data ) { // }

Sauf certaines méthodes qui renvoient d'autres choses en plus :)
C'est du basique, je compte l'améliorer prochainement... Mais alors comment :o

A voir également

Ajouter un commentaire Commentaires
cs_m54 Messages postés 11 Date d'inscription samedi 31 mai 2008 Statut Membre Dernière intervention 8 février 2009
8 févr. 2009 à 14:01
Chez moi ca marche moyen, et en un fichier c'est simple d'accord mais même peut être trop
leknoppix Messages postés 3 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 12 janvier 2016
20 juin 2008 à 17:03
Sa ne marche pas chez moi.
elidris Messages postés 125 Date d'inscription lundi 15 août 2005 Statut Membre Dernière intervention 9 octobre 2007
27 mai 2006 à 13:36
Salut,
je decouvres tout ca aujourd'hui, mais je ne comprend rien (lol), il faudrais que j'arrive a le faire fonctionner pour comprendre, j'ai créé la base de donnée avec le bout de code <?php CREATE TABLE....?>
mais je ne vois pas comment m'y connecter. d'habitude j'ai un truc genre include('connect.php') !!! quand je lance le fichier j'ai une erreur : Parse error: parse error, unexpected T_CLASS in W:\www\intoxitation\test_classe.php on line 2

et en ligne 2 j'ai : abstract class Objet {

comme vous voyez j'ai rien compris....
si vous pouvez m'aiguiller.
Merci
hametsu21 Messages postés 37 Date d'inscription mardi 1 novembre 2005 Statut Membre Dernière intervention 24 février 2008
8 mai 2006 à 17:14
En relation avec une gestion des membres POO (voir le tutorial de FHX) comment démarquer les méthodes reservées à l'administration ajout/supprime/edite et à tous les visiteurs lister les news/ajouter un commentaire/... sans pour autant que se soit "bordelique" un morceau de poo news dans les class de gestions d'utilisteur par exemple ?
A+
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
24 avril 2006 à 16:52
C'est vrai, tu as raison sur le point du débutant... le seul problème, c'est que je ne peux pas mettre cette source en tant qu'initié simplement parce que c'est orienté objet. Donc je me retrouve un peu au pied du mur.

Mais tu as quand même raison, quand on poste quelque chose, on se doit de le documenter un minimum pour les autres.

Je m'attache à la tache quand je le pourrais ! Merci de la remarque :)
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.