Interface de gestion de flux RSS 2.0 en PHP 5
Date de publication : 22/11/2007
Par
Mathieu Fernandez (Accueil)
Ce tutorial explique comment mettre en place une interface de gestion de flux RSS 2.0 en PHP 5.
Il ne s'adresse pas à des personnes ayant des sites énormes où des dizaines de nouvelles RSS sont diffusées chaque jour mais plutôt à ceux qui souhaitent créer des flux RSS occasionnellement sans rentrer dans le code XML.
Cette interface vous permettra de créer, modifier et supprimer un flux RSS ou une news contenue dans un flux.
I. Introduction
I-A. Remerciements
I-B. Préambule
II. La base de données MySQL
III. L'organisation des dossiers et fichiers
III-A. L'arborescence
III-B. La définition des constantes
IV. L'interface
IV-A. Formulaire de création d'un flux
IV-B. Formulaire de création d'une nouvelle
IV-C. Formulaire de suppression d'un flux
IV-D. Formulaire de suppression ou modification d'une nouvelle
IV-E. Le traitement des formulaires
V. Traitement des formulaires
V-A. Création d'un nouveau flux RSS
V-B. Création d'une nouvelle
V-C. Suppression d'un flux
V-D. Suppression d'une nouvelle
V-E. Modification d'une nouvelle
VI. Affichage d'un flux
VII. Conclusion
VIII. Téléchargements
I. Introduction
I-A. Remerciements
Je souhaiterais, avant toute chose, remercier toute l'équipe Web/PHP pour leur soutien et leur aide dans la rédaction de cet article ainsi qu'à
wichtounet pour m'avoir permis de reprendre son tutorial et à
Aspic pour la correction orthographique ;).
I-B. Préambule
Ce tutorial repose en partie sur celui de wichtounet :
Création d'un système RSS pour vos news avec PHP 4 et 5.
Il n'est donc pas fait pour vous apprendre à créer un flux RSS 2.0, les flux et les nouvelles qu'ils contiennent.
Nous allons voir, ensemble, comment créer une interface de gestion de flux RSS 2.0 en PHP 5 afin de faciliter la création, la modification et la suppression de flux RSS.
Dans ce tutorial, nous faisons appel à des styles CSS et des scripts Javascript qui sont disponibles dans le code source à la fin du tutorial sous forme d'archive RAR et ZIP.
II. La base de données MySQL
Dans un premier temps, nous allons avoir besoin de créer une base de données MySQL. Ici, nous utilisons une base de données MySQL et les fonctions PHP associées mais vous pouvez évidemment utiliser n'importe quel autre SGBD.
Cette BD, extrêmement simple, va nous permettre de conserver les flux et les nouvelles contenues dans ceux-ci.
Nous appelons cette BD db_rss.
| Script de génération de la base de données MySQL db_rss |
drop table if exists TJ_CHANNEL_ITEM;
drop table if exists T_ITEM;
drop table if exists T_CHANNEL;
CREATE TABLE T_ITEM (
IT_ID int(4) NOT NULL auto_increment,
IT_TITRE varchar(255) NOT NULL,
IT_DESC text NOT NULL,
IT_LIEN varchar(255) default NULL,
IT_DATE int(12) NOT NULL default '0',
IT_AUTEUR varchar(100) NOT NULL default '',
PRIMARY KEY (IT_ID)
)
TYPE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE T_CHANNEL (
CH_ID varchar(100) NOT NULL,
CH_TITRE varchar(255) NOT NULL,
CH_DESC text NOT NULL,
PRIMARY KEY (CH_ID)
)
TYPE=InnoDB;
CREATE TABLE TJ_CHANNEL_ITEM (
CI_CH_ID varchar(100) NOT NULL,
CI_IT_ID int(4) NOT NULL,
PRIMARY KEY (CI_CH_ID,CI_IT_ID)
)
TYPE=InnoDB;
create index IT_CH_FK on TJ_CHANNEL_ITEM (CI_IT_ID);
create index CH_IT_FK on TJ_CHANNEL_ITEM (CI_CH_ID);
alter table TJ_CHANNEL_ITEM
add constraint FK_CH_IT foreign key (CI_CH_ID) references T_CHANNEL (CH_ID),
add constraint FK_IT_HC foreign key (CI_IT_ID) references T_ITEM (IT_ID);
|
Description des tables
- T_ITEM : listes des news. Une news a un identifiant, un titre, une description, un lien vers la page pointée, une date et un auteur
- T_CHANNEL : liste des flux RSS. Un flux RSS a un identifiant, un titre et une description générale.
- TJ_CHANNEL_ITEM : table de liaison entre une news et un flux.
III. L'organisation des dossiers et fichiers
III-A. L'arborescence
Pour notre exemple, nous utilisons une arborescence de fichiers particulière afin de séparer les styles CSS, les images, les fonctions utilisées pour faire des traitements particuliers, les fichiers PHP gérant les flux RSS et enfin le dossier contenant les fichiers XML des flux RSS.
Vous pouvez, bien entendu, adapter l'arborescence des fichiers en fonction de vos besoins.
Arborescence des dossiers et fichiers
- gestion_flux.php : script PHP générant l'interface de gestion des flux RSS
- affichage_flux.php : script PHP qui génère la page affichant les flux RSS créés et permettant de s'abonner à un flux RSS
- constant.inc.php : script PHP définissant les constantes ainsi que les fichiers à inclure
- flux_rss : dossier contenant les flux RSS au format XML
- fonctions : dossier contenant les fonctions utilisées pour faire des traitements quelconques
- fonctions_gestion_rss : dossier contenant les fonctions nécessaires à la gestion des flux RSS
- images : dossier contenant les images à afficher dans vos flux RSS
- styles : dossier contenant les styles CSS de la page gestion_flux.php
Les dossiers sont en gras, les fichiers en italiques.
III-B. La définition des constantes
Les constantes sont définies dans le fichier constant.inc.php.
Si vous utilisez l'arborescence décrite ci-dessus, voici le code à mettre dans le fichier constant.inc.php :
| Contenu de constant.inc.php |
<?php
define ('MAIN_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
define ('FONCTIONS_PATH', MAIN_PATH.'fonctions'.DIRECTORY_SEPARATOR);
define ('FONCTIONS_RSS_PATH', MAIN_PATH.'fonctions_gestion_rss'.DIRECTORY_SEPARATOR);
define ('PHY_RSS_PATH', MAIN_PATH.'flux_rss'.DIRECTORY_SEPARATOR);
define ('SITE_URL', 'http://'.$_SERVER['HTTP_HOST'].'/tuto_gestion_rss/');
define ('VIR_RSS_PATH', SITE_URL.'flux_rss/');
define ('FONCTIONS_URL', SITE_URL.'fonctions/');
define ('CSS_URL', SITE_URL.'styles/');
define ('IMAGES_URL', SITE_URL.'images/');
$host='localhost';
$user='root';
$pwd='pwd';
$db='db_rss';
require_once (FONCTIONS_PATH.'connection_bd_rss.php');
require_once (FONCTIONS_RSS_PATH.'gestion_xml_rss.php');
require_once (FONCTIONS_PATH.'quote_smart.php');
require_once (FONCTIONS_PATH.'fichier_existant.php');
require_once (FONCTIONS_PATH.'format_string.php');
?>
|
Vous l'aurez compris, ce fichier permet de définir l'endroit où se situe tel ou tel fichier en fonction de la racine physique ou virtuelle du site.
Ceci permet de migrer le site très facilement car les seules choses à modifier sont l'URL du site et les identifiants de connexion à la BD si ces derniers changent.
IV. L'interface
L'interface est très simple et très intuitive. Nous l'appellerons gestion_flux.php dans notre tutorial.
Elle permet, en une seule page, de créer ou de supprimer un flux RSS ainsi que de créer, modifier ou supprimer une nouvelle.
Elle est, en fait, constituée de 4 formulaires HTML qui permettent, chacun, de réaliser une action.
Les 4 formulaires
- Création d'un nouveau flux RSS
- Création d'une nouvelle
- Suppression d'un flux
- Suppression ou modification d'une nouvelle
IV-A. Formulaire de création d'un flux
Ce formulaire permet de créer un document XML vide respectant le format RSS 2.0.
Il suffit, pour cela, de spécifier un nom au fichier qui sera créé, un titre et une description au flux.
| Formulaire de création d'un flux |
<div class="paragraphe">
<h2 onclick="affiche('gestion1')" onmouseover="this.style.color='#06c'; this.style.cursor='pointer';"
onmouseout="this.style.color='#600'; this.style.cursor='default';">Création d'un nouveau flux RSS</h2>
<form action="gestion_flux.php" method="post" id="gestion1">
<input type="hidden" name="type" value="new_flux" />
<input type="hidden" name="new" value="1" />
Nom du fichier :<br /><input type="text" name="filename" class="input_text" /><br /><br />
Titre du flux (channel) :<br /><input type="text" name="channel_title" class="input_text" /><br /><br />
Description du flux (channel) :<br /><textarea name="channel_description" rows="10" cols="102"></textarea>
<br /><br />
<input type="submit" value="OK" />
<input type="reset" value="Tout effacer" />
</form>
</div>
|
IV-B. Formulaire de création d'une nouvelle
Ce formulaire permet de créer une nouvelle dans un flux RSS que vous aurez créé auparavant.
Il suffit, pour cela, d'indiquer le flux visé par le biais d'une liste déroulante, de donner un titre à la nouvelle et d'en faire une description.
Si vous le souhaitez vous pouvez aussi faire un lien vers l'article visé sur votre site et indiquer le mail de l'auteur.
| Formulaire de création d'une nouvelle |
<div class="paragraphe">
<h2 onclick="affiche('gestion2')" onmouseover="this.style.color='#06c'; this.style.cursor='pointer';"
onmouseout="this.style.color='#600'; this.style.cursor='default';">Création d'une nouvelle</h2>
<form action="gestion_flux.php" method="post" id="gestion2">
<input type="hidden" name="type" value="new_item" />
<?php
$query="SELECT CH_ID, CH_TITRE FROM T_CHANNEL";
$result=mysql_query($query) or die('Erreur lors de la sélection des flux :'.mysql_error());
if (mysql_num_rows($result)>0)
{
echo 'Flux visé : <select name="filename" style="width:300px;">';
while($tab_result = mysql_fetch_array($result))
echo '<option value="'.$tab_result['CH_ID'].'">'.$tab_result['CH_TITRE'].'</option>';
echo '</select>
<br /><br />
Titre :<br /><input type="text" name="title" class="input_text" /><br /><br />
Contenu :<br /><textarea name="description" rows="10" cols="102"></textarea><br /><br />
Lien vers l\'article :<br /><input type="text" name="lien" class="input_text" value="http://"/><br /><br />
Adresse mail de l\'auteur :<br /><input type="text" name="author" class="input_text"/><br /><br />
<input type="submit" value="OK" />
<input type="reset" value="Tout effacer" />';
}
else echo 'Il n\'existe pas de flux pour le moment donc vous ne pouvez pas créer de nouvelle.';
?>
</form>
</div>
|
IV-C. Formulaire de suppression d'un flux
Ce formulaire permet de supprimer un flux RSS 2.0 créé auparavant grâce à cette interface.
Il suffit, pour cela, de sélectionner le flux dans une liste déroulante.
| Formulaire de suppression d'un flux |
<div class="paragraphe">
<h2 onclick="affiche('gestion3')" onmouseover="this.style.color='#06c'; this.style.cursor='pointer';"
onmouseout="this.style.color='#600'; this.style.cursor='default';">Suppression d'un flux</h2>
<form action="gestion_flux.php" method="post" id="gestion3">
<input type="hidden" name="type" value="suppr_flux" />
<?php
if (mysql_num_rows($result)>0)
{
echo 'Flux visé : <select name="filename" style="width:300px;">';
$query="SELECT CH_ID, CH_TITRE FROM T_CHANNEL";
$result=mysql_query($query) or die('Erreur lors de la sélection des flux :'.mysql_error());
while($tab_result = mysql_fetch_array($result))
echo '<option value="'.$tab_result['CH_ID'].'">'.$tab_result['CH_TITRE'].'</option>';
echo '</select><br /><br />
<input type="submit" value="OK" />';
}
else echo 'Il n\'existe pas de flux pour le moment vous ne pouvez donc pas en supprimer un.';
?>
</form>
</div>
|
IV-D. Formulaire de suppression ou modification d'une nouvelle
Ce formulaire permet soit de modifier, soit de supprimer une nouvelle.
Il suffit, pour cela, de spécifier une nouvelle dans une liste déroulante.
| Formulaire de suppression ou modification d'une nouvelle |
<div class="paragraphe">
<h2 onclick="affiche('gestion4')" onmouseover="this.style.color='#06c'; this.style.cursor='pointer';"
onmouseout="this.style.color='#600'; this.style.cursor='default';">Suppression ou modification d'une nouvelle</h2>
<form action="gestion_flux.php" method="post" id="gestion4">
<input type="hidden" name="type" value="suppr_item" />
<?php
$query="SELECT IT_ID, IT_TITRE FROM T_ITEM ORDER BY IT_DATE DESC";
$result=mysql_query($query) or die('Erreur lors de la sélection des nouvelles :'.mysql_error());
if (mysql_num_rows($result)>0)
{
echo 'Nouvelle visée (ordonnées par date d\'insertion) : <br /><select name="item">';
while($tab_result = mysql_fetch_array($result))
echo '<option value="'.$tab_result['IT_ID'].'">'.$tab_result['IT_TITRE'].'</option>';
mysql_close();
echo '</select><br /><br />
<input type="submit" name="action" value="Supprimer" />
<input type="submit" name="action" value="Modifier" />';
}
else echo 'Il n\'y a aucune nouvelle de créer';
?>
</form>
</div>
|
IV-E. Le traitement des formulaires
Comme vous l'avez sûrement constaté, les 4 formulaires font appel au fichier gestion_flux.php qui est la page sur laquelle ils se trouvent.
En fait, Il faut rajouter du code PHP au début de cette page afin d'inclure tel ou tel script PHP en fonction du formulaire rempli par l'utilisateur.
Cela permet en une seule page de faire les modifications voulues sur tous les flux RSS que vous aurez créé sans changer de page (permet d'éviter les allers-retours entre pages).
| Traitement des formulaires |
<?php
if (isset($_POST['type']) && isset($_POST['action']) && isset($_POST['item']) && $_POST['action']=='Modifier')
{
header('Status: 301 Moved Permanently', false, 301);
header('Location: http://localhost/tuto_gestion_rss/fonctions_gestion_rss/interface_modif_item.php?item='.$_POST['item']);
exit();
}
require_once 'constant.inc.php';
|