Le modêle objet de XoopsLe modêle objet de XOOPSpar OryxvetLe modêle objet de xoops est basé sur 2 classes XoopsObject et XoopsObjectHandler toutes les deux codées dans le fichier /kernel/object.php. Ces 2 classes forment la couche d'accès aux données persistantes telle qu'elle est décrite dans le DAO pattern. C'est en les spécialisant que l'on implémente le modêle pour une entité particuliêre (souvent associé á une seule table de BD) comme le font toutes les classes du répertoire kernel qui constitue le noyau de xoops. J'encourage fortement les programmeurs de nouveaux modules xoops s'appuyant sur des tables de BD á utiliser ce modêle. Les raisons d'utiliser ces 2 classes sont multiples :
XoopsObject possêde tous les services relatifs á la gestion d'un objet (une instance de la classe) et de ses attributs (getter et setter) alors que XoopsObjectHandler sert de manipulateur ou de contrôleur des instances (insertion, modification ou sélection d'objets. XoopsObjectHandler et XoopsObjectNous allons utiliser comme exemple la table priv_msgs qui permet d'envoyer des message privés entre membres du portail. XoopsObject est la classe mêre permettant de manipuler les attributs d'un objet données. Il s'appuie sur le tableau $vars pour manipuler les attributs de l'objet. $vars contient les attributs de l'objet sous la forme clé, valeur. La clé désigne le nom de l'attribut c'est á dire souvent le nom d'une colonne de la table de BD. XoopsObject offre des mécanismes génériques d'accès aux données ; ses principales méthodes sont :
La classe associée au Privmessage ne doit ainsi définir que les attributs qu'elle veut gérer
class XoopsPrivmessage extends XoopsObject
Il existe plusieurs intérêts d'utiliser un tableau plutôt qu'autant d'attribut de classe que de variables (couramment fait en java). Il est plus efficace en terme de temps d'exécution de manipuler de tels tableaux car ce modêle est plus proche de la structure de la requête http postée. En travaillant sur un tableau on économise le déchargement du tableau en variable. La requête (issue par exemple d'un formulaire de mise á jour d'un objet) s'utilise directement pour charger un objet. Voici un exemple ou par convention les champs HTML vont être nommés comme le nom des attributs.
$pm =& $pm_handler->get($idPm); // Récupération de l'objet
C'est un peu lourd puisque l'on passe toute la requête mais le setVars fera le " ménage " en vérifiant si la clé est un attribut géré par la class. Une autre solution est de parcourir les vars de la class pour l'aller chercher que ceux dont on a besoin :
foreach ($pm->getVars() as $key => $value) {
Quelque soit l'option choisie, en passant l'objet au handler, la mise á jour est stockée dans la BD :
$pm_handler ->insert($pm) ;
XoopsObjectHandler est une classe abstraite qui une fois implantée permet de manipuler les objets d'une class particuliêre (maclasse) étendant la class xoopsObject. Ce Handler (ou manipulateur) peut se récupérer á l'aide de la méthode xoops_gethandler du fichier /include/function.php en passant le nom de la classe maclasse que l'on veut manipuler. Attention toutefois car cette méthode se base sur une convention de nom, il faut avoir nommé le handler xoopsmaclasseHandler. On peut aussi simplement instancier la class.
$pm_handler =& xoops_gethandler('privmessage');
Voici les principales méthodes proposées par ce handler qu'il s'agit d'implémenter :
Les différentes implémentations de XoopsObjectHandler des classes du répertoire /kernel introduisent 2 autres méthodes bien utile non présents dans la class mêre : Typiquement voici un exemple de sélection de l'ensemble de privateMsg d' un utilisateur puis l'affichage du sujet et de la date du message :
$criteria = new Criteria('to_userid', $xoopsUser->getVar('uid'));
L'utilisation avec un template smarty sera aussi simple en affectant l'ensemble de l'objet :
$pms =& $pm_handler->getObjects(new Criteria('to_userid', $xoopsUser->getVar('uid')));
Associé au template smarty :
<{section name=i loop=$pms}>
Class_generator : un générateur três simple.Pour éviter le fastidieux codage de l'implémentation de ces 2 classes, nous avons développé un petit générateur qui nous a fait gagné du temps et a fiabilisé et homogénéisé le code de type DAO. Il s'appuie sur un seul template smarty décrivant le fichier des 2 classes implémentent respectivement XoopsObject et XoopsObjectHandler. Le template peux bien entendu être modifié pour prendre en compte les besoins spécifiques. Ce générateur utilise uniquement les informations issues de la base de données ce qui impose d'avoir déjá une table de base de donnée sur laquelle s'appuyer. Class_generator génêre un fichier par table de Base de données. Il se base aujourd'hui sur la convention que la table source ne doit posséder qu'une seule clé primaire. Ceci pour générer la méthode du handler getId($maClePrimaire). Une fois le module installé, l'accès au générateur s'effectue dans la partie administration. Dans le formulaire " Générer une class " aprês avoir sélectionné le module sur lequel on travaille et la table de BD existante, le clic sur le bouton " générer " génêre un fichier nommé du nom de la table de BD sélectionnée dans le répertoire /class du module. Le module est téléchargable sur le site dev.oryxvet.com OryxVet
|
107 Personne(s) en ligne (1 Personne(s) connectée(s) sur Documentations) | Utilisateur(s): 0 | Invité(s): 107 | Plus ...