PHPUTIL
News | Présentation | Développeurs | Les modules | Téléchargements   

> Généralités

PHPUTIL/News est architecturé autour de plugins. Il y a deux types de plugins :

  • les plugins s'occupant de convertir les news en un format lisible ou exploitable par l'utilisateur final (plugins de "sortie") ;
  • les plugins s'occupant de stocker/lire les news de façon fiable et sécurisée (plugins de stockage).
Nous allons étudier (dans ce document) le deuxième type de plugin (ceux concernant le stockage des news) et nous allons voir comment en créer de nouveaux pour augmenter les possibilités de PHPUTIL/News.

> Comment marchent les plugins de stockage ?

Ce n'est pas compliqué. Quand on demande à PHPUTIL/News de stocker ou charger une ou plusieurs news, le "manager" de l'application passe la main au plugin de stockage choisi. Ce dernier répond alors à la requête.

Les plugins de stockage sont tous contenus dans le répertoire storage. Les noms des fichiers (sans l'extension .php) correspondent aux noms des plugins de stockage. Par exemple, si l'on appelle le plugin de stockage DB, c'est le fichier DB.php qui sera concerné...

Vous remarquerez également la présence d'un fichier nommé common.php. Il définit l'API standard d'un plugin de stockage. Tous les plugins de stockage doivent en hériter. L'intérêt est que si une fonctionnalité majeure (décrite dans le fichier common.php) n'est pas implémenté dans le nouveau plugin de stockage, le module common déclenchera une erreur PEAR explicite signalant que la fonctionnalité n'est pas disponible pour ce plugin.

> Comment faire un plugin de stockage ?

Puisqu'un exemple vaut mieux qu'un long discours, supposons que vous désiriez créer un plugin de stockage nommé Test. Votre code devra ressembler à :

                
<?php
require_once('News/storage/common.php'); // On charge le fichier common.php

class News_Storage_Manager_Test extends News_Storage_Manager
{
    // (...) votre code ici
}
?>
                
            
Notez que le nom de la classe n'est pas simplement test mais obligatoirement News_Storage_Manager_test ! Le nom de votre plugin reste cependant uniquement Test. Cette classe devra être contenue dans un fichier nommé Test.php (attention aux majuscules/minuscules) contenu dans le répertoire storage.

> Que doit faire un plugin de stockage ?

L'API d'un plugin de stockage (nommé Test) est la suivante :

- Un constructeur nommé (dans notre cas) News_Storage_Manager_Test

  void News_Storage_Manager_Test ( array $config )

  • $config est un tableau associatif contenant diverses options de configuration sous la forme (par exemple) :
                                
    $config = array(
        'option1' => $option1Value,
        'option2' => $option2Value,
        (...)
    );
                                
                            
    Il y a deux options obligatoires url (qui contiendra l'url complète du répertoire contenant PHPUTIL/News) ainsi que root (qui contiendra le chemin d'accès complet depuis la racine du système de fichier au répertoire contenant PHPUTIL/News). NB : Pas de / à la fin de ces deux valeurs ! Un exemple de configuration minimum serait donc :
                                
    $config = array(
        'url' => 'http://www.test.com/phputil/news',
        'root' => '/home/user/www/phputil/news'
    );
                                
                            
Le première ligne de ce constructeur devra être impérativement un appel au constructeur de la classe père. Donc votre constructeur devra ressembler à :
                    
function News_Storage_Manager_Test($config)
{
    $this->News_Storage_Manager($config);
    // (...) votre code ici
}
                    
                

- Une méthode de chargement simple (nommée load)

  News load ( string $id )

  • $id est l'identifiant de la news à charger
Cette méthode devra donc simplement retourner la news (sous forme d'objet News) dont l'identifiant est passé en arguments. Pour générer un objet de classe News, voyez le fichier news.php situé dans la racine de PHPUTIL/News.

- Une méthode de chargement multiple (nommée multipleLoad)

  array multipleLoad ( [ array $options ] )

  • $options est un tableau associatif permettant de spécifier des options à la lecture multiple (comme le nombre de news à charger...)
Cette méthode devra donc simplement retourner un tableau ordonné contenant un certain nombre de news (le nbr dépendant des news existantes et des options passées en arguments). Chaque élément du tableau est donc un objet de classe News.

- Une méthode (nommée insert) pour insérer une nouvelle news dans le moyen de stockage

void insert ( object $news, [ array $options ] )

  • $news est un objet de la classe News. Il s'agit de la news à insérer dans le moyen de stockage.
  • $options est un tableau associatif permettant de spécifier d'éventuelles options à la méthode de sauvegarde.
Cette méthode insérera donc une news dans le moyen de stockage (en tant que nouvel enregistrement). Il existe une autre méthode update pour sauvegarder des modifications.

- Une méthode (nommée update) pour sauvegarder les modifications réalisées sur une news dans le moyen de stockage

void update ( object $news, [ array $options ] )

  • $news est un objet de la classe News. Il s'agit de la news dont les modifications doivent être sauvegardées dans le moyen de stockage.
  • $options est un tableau associatif permettant de spécifier d'éventuelles options à la méthode de sauvegarde.
Cette méthode sauvegardera donc les modifications apportées à une news dans le moyen de stockage (en écrasant l'ancien enregistrement). Cette méthode ne devra pas être appelée si la news en question n'a pas été (au préalable) insérée dans le moyen de stockage via la fonction insert.

- Une méthode (nommée kill) pour effacer une news du moyen de stockage.

void kill ( string $idNews, [ array $options ] )

  • $idNews est l'indentifiant de la news à supprimer.
  • $options est un tableau associatif permettant de spécifier d'éventuelles options à la méthode de suppression.
Cette méthode effacera donc la news dont l'identifiant est passé en argument du moyen de stockage.

> Conclusion

Vous savez donc désormais créer des plugins de stockage pour PHPUTIL/News. Veillez seulement à bien respecter l'API précédemment évoquée sous peine d'incompatibilités éventuelles avec les évolution futures du programme. Il est cependant tout à fait envisageable de n'implémenter qu'une partie de cette API, les méthodes manquantes le seront par la classe père (qui déclenche une erreur PEAR signalant que la fonctionnalité n'est pas disponible). En effet, il ne sera pas toujours possible de réaliser les méthodes d'écriture (news sur un autre serveur...) et on pourra alors se limiter aux méthodes de lecture.


 
Design 'plastix' by Ryan Collier <collier@xmission.com> (GNU/GPL)

SourceForge Logo