L'objet Wiki
Voici le début de notre objet wiki, avec son constructeur
:
Class wiki
{
var $host;
var $user;
var $pass;
var $base;
var $tabl;
var $date;
var $titre;
var $auteur;
var $contenu;
function wiki()
{
$this->host = 'localhost';
$this->user = 'root';
$this->pass = '';
$this->base = 'test2';
$this->tabl = 'jdnwiki';
$this->titre = -1;
$this->contenu = -1;
$this->date = -1;
$this->auteur = -1;
$connexion = mysql_connect($this->host,
$this->user, $this->pass);
$db = mysql_select_db($this->base,
$connexion) or die(mysql_error());
}
(...)
Nous définissons les diverses variables de notre objet,
et dans le constructeur leur assignons une valeur. Vous remarquerez
que la connexion à la base est lancée à
chaque instanciation de l'objet : ce n'est pas le plus efficace,
mais nous ne cherchons pas ici l'optimisation...
Notre
navigation n'est pas des plus optimisée : nous définissons
trois états possibles par page : lecture, modification,
sauvegarde. Etant donné que nous ne savons pas à
l'avance si une page existe ou s'il faut la créer (selon
les principes du Wiki), la lecture et la modification seront
gérées par une même méthode, affichePage(),
qui se chargera de trier le bon grain de l'ivraie. La sauvegarde
sera elle gérée par la méthode sauverPage().
Nous définirons également une méthode
chargePage() qui se chargera
du coté SQL de la chose, et une autre wiki2html()
qui appliquera quelques règles de WikiSpeech à
nos pages (sans quoi elles seraient bien plates).
Les deux premières sont gérées par la
méthode principale, affichage()
:
function affichage()
{
if ( (isset($_REQUEST['mode']) && $_REQUEST['mode']
== 'modif')
&& (isset($_REQUEST['titre']) && !empty($_REQUEST['titre'])
) )
{
$this->affichePage($_REQUEST['titre'],
isset($_REQUEST['mode']));
}
elseif (isset($_REQUEST['mode']) && $_REQUEST['mode']
== 'ecriture')
{
$this->sauverPage();
}
elseif (isset($_REQUEST['titre']) && !empty($_REQUEST['titre'])
)
{
$this->affichePage($_REQUEST['titre']);
}
else
{
$this->affichePage();
}
}
Voici le cheminement :
1) si un titre est spécifié et que le mode demandé
est 'modif', nous donnons ces deux arguments à affichePage()
2) sinon, si le mode est écriture, nous sauvons l'état
de l'objet avec sauvePage()
3) sinon, si nous n'avons qu'un titre, nous l'affichons
4) sinon (rien n'est donc demandé), nous appelons simplement
affichePage().
affichePage() prendra en
argument le titre de la page demandé, et le mode de
visualisation. Les points 3) et 4) sont pris en charge par
le fait que nous définissons des valeurs par défaut
pour ces deux arguments : la page d'Accueil et le mode "lecture".
Ainsi, en déterminant si le mode n'est pas sur modif
(donc une demande de modification) ou la date à "-1"
(donc les variables objet n'est pas été créés),
la fonction affiche soit la page normale, soit le formulaire
d'éditons. Les deux états ont besoin de charger
la page demandée à l'aide de chargePage().
function affichePage($titre='Accueil',
$mode='lecture')
{
$this->chargePage($titre);
if ( ($mode != 'modif') && !($this->date == -1)
)
{
?>
<form method="post" action="jdnwiki.php">
<fieldset>
<h2><?=$this->titre;?></h2>
<?=$this->wiki2html($this->contenu);?>
<hr />
<i>(Dernière modification le <?=date("d/m/y
à H:i:s", $this->date);?> par <?=$this->auteur;?>)</i><br
/>
<input type="hidden" name="titre"
value="<?=$this->titre;?>" />
<input type="hidden" name="date"
value="<?=$this->date;?>" />
<input type="hidden" name="auteur"
value="<?=$this->auteur;?>" />
<input type="hidden" name="mode"
value="modif" />
<input type="submit" value="Modifier
cette page" />
</fieldset>
</form>
<?
}
else
{
$this->titre = $titre;
$ti = (-1 == $this->titre) ? null
: $this->titre;
$ts = time();
$ip = $_SERVER['REMOTE_ADDR'];
$txt = (-1 == $this->contenu) ? null
: $this->contenu;
?>
<form method="post" action="jdnwiki.php">
<fieldset>
<input type="hidden" name="titre"
value="<?=$ti;?>" />
<input type="hidden" name="date"
value="<?=$ts;?>" />
<input type="hidden" name="auteur"
value="<?=$ip;?>" />
<input type="hidden" name="mode"
value="ecriture" />
Vous êtes en train de modifier la
page : "<?=$ti;?>"<br />
<textarea name="contenu" cols="100"
rows="20"><?=$txt;?></textarea><br />
<input type="submit" value="Valider
les modifications" />
</fieldset>
</form>
<?
}
}
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Notez que la conversion des textes est faite en directe avec
wiki2html(), et l'IP de l'auteur
est récupérée à l'aide de $_SERVER['REMOTE_ADDR'];.
De son coté, la date est elle aussi transformée
directement du Timestamp UNIX à un date normale avec
date("d/m/y à H:i:s", $this->date).
Le reste ne fait que remplir la page à l'aide des variables
d'objet...
|