Php5 - classe de gestion de modules

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 466 fois - Téléchargée 23 fois


Contenu du snippet

Alors, je savais pas si je devais mettre ca dans les tutos ou ici. Je tente ici sait on jamais.
Aujourd'hui, quoi de neuf ? Gestion de modules d'un site web.
Un truc tout simple bien entendu.
La gestion des modules se fait via un simple fichier XML. Dans ce fichier, on établi si oui ou non on veut activer le module. C'est pour le moment quelque chose de très simple.
Voici le code :

Source / Exemple :


<?php
// Toute classe doit hériter de celle ci.
abstract class Core {
	
 static private $module = array();
 static private $modconf = NULL;
	
 public function __construct($modname) {
 	
   if ( !isset(self::$modconf) ) self::$modconf = simplexml_load_file('./class/init.xml');
   
   if ( self::isModLoadable($modname) ) {
   	    self::$module[$modname] = TRUE;
   } else {
   	    throw new Exception('Module impossible à instancier');
   }
   
 }

 static private function isModLoadable($modname) {
 	   
   foreach ( self::$modconf->module as $module ) {
   	          if ( (string) strtolower($module->name) == strtolower($modname)
   	            && (string) strtolower($module->loadable) == 'true' )
   	          return TRUE;
   }
  return FALSE;
 	
 }
 
}

// Voici donc la classe en elle-même. C'est un truc tout simple n'est-ce-pas ?
// L'emploi des propriétés statiques est faite pour controler les modules. (et encore, c'est pas très poussé pour le moment !
// Voici le fichier XML :
?>
<?xml version="1.0" encoding="iso-8859-1"?>
<modules>
 <module>
  <name>mysql</name>
  <loadable>TRUE</loadable>
 </module>
 <module>
  <name>news</name>
  <loadable>TRUE</loadable>
 </module>
 <module>
  <name>test</name>
  <loadable>FALSE</loadable>
 </module>
</modules>
<?php
// La aussi, c'est du simple, on voit aisément la relation entre la classe du haut et le fichier ci-dessus.

// Prenons une classe d'un projet :
class x extends Core {

 public $y;
 private $z;

 public function __construct() {
  parent::__construct(__CLASS__);
 }

 // .... etc...

}

// En instanciant mon objet, je vais vérifier via la méthode statique si je peux oui ou non utiliser mon module.
// Voici comment se passe l'instanciation :

try {
 $x = new x;
 $x->doSomething();
 $x->try();
} catch ( Exception $e ) {
 echo $e->getMessage();
}

// Que va t'il se passer ? Si le module 'x' est présent dans mon fichier XML, et que 'loadable' => TRUE alors je peux continuer à utiliser mon objet, SINON on passe par la case d'exception.
// On peut voir ca avec un système de news et de commentaires.
// Imaginons qu'on puisse n'avoir que les news et les commentaires desactivés :

try {
 $news = new NewsFactory;
 $news->method();
 // ...
 // Fin d'affichage de la news, affichage des commentaires :
  try {
   $comments = new CommentsFactory;
   $comments->show();
   // ...
  } catch ( Exception $e1 ) {
    // Signifie que les commentaires seront desactivés
  }

} catch ( Exception $e2 ) {
  // Signifie que les news et les commentaires sont desactivés
}

?>

Conclusion :


Ca peut marcher pour n'importe quel type de module.
On peut étendre la classe Core pour une utilisation plus poussé des methodes :
if ( Core::module_loaded($modulename) )
Core::Unload_module($modulename);

etc...

Et encore, les possibilités sont immenses !
Si vous avez des suggestions, je prend. Je compte developper un ptit truc sympa avec ca. J'ai de la reserve de code sur l'ordi mais je compte pas encore vous le faire partager... un peu plus tard surement :p

A voir également

Ajouter un commentaire

Commentaires

cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
De façons objective les deux choix peuvent être les plus rapide cela dépend surtout de l'architecture des scripts et des serveurs utilisé : par exemple l'un des avantage de mysql peut être le fait de refiler le traitement pour la selection de données à une autre machine que celle fesant tourner apache (et ainsi ne pas pénaliser les autres utilisateur du site) => éviter les surcharge de la machine apache. Cette méthode se base sur le principe de la délégation des taches de façons à améliorer les rendements. Il en existe d'autre qui se valent et dispose chacune de leurs avantages et inconvénients. Il est aprés possible d'étendre le raisonement à l'architecture des site en eux mêmes.
cs_Garno
Messages postés
36
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
14 janvier 2009
-
Salut,

Est-il plus rapide d'utiliser XML plutôt que MySQL car je comprend qu'il est très utile de créer des fichiers XML pour ensuite générer des fichiers mais pour le reste je n'en vois pas dutout l'utilité ou plutôt l'avantage de devoir gèrer de multiple fichiers plutôt qu'une simple base de données. Merci d'éclairer mes lanternes :)

Je sais pas si ce commentaire à sa place dans cette source mais je tente quand même puisque je veux absolument éclaircir ce point pour ma culture personnelle ;)
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

curieusement, moi, je vois ça dans l'autre sens : quel intérêt d'utiliser une base de données quand on peut s'en passer ? La plupart des sites s'appuient lourdement sur une base de données. Quand c'est un petit site perso, pas de problème...quand c'est un site plus lourd...on a tout intérêt à soulager le serveur de base de données. J'utilise souvent XML dans ce cadre-ci. XML me sert à faire des tracelog, à faire de la localisation, à faire, comme ici, de la configuration, et parfois même, je m'en sers comme vraie base de données. Pour décrire un produit, par exemple, XML est parfait; il a même un gros avantage par rapport à une bdd : c'est un langage de description de données. Quand je parle de description d'un produit, je ne parle pas de description textuelle : sa description dans le but de le générer par la suite, en pdf par exemple.
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
XML peut être utilisé pour tout et n'importe quoi, comme une base de donnée.
J'aurais pu utiliser un fichier .ini, une base de donnée SQL, un simple fichier .txt bref, les possibilités sont nombreuses.
Pourquoi un XML ?
Imagine que la configuration de ton site repose sur un XML, il est assez aisé de pouvoir implémenter mon code dedand.
Bref, les gouts et les couleurs quoi :)

J'aime bien SQL moi aussi, mais la sur le coup jvoulais le faire avec XML. Pour utiliser ma classe avec SQL, suffit de réécrire la classe pour SQL c'est tout :)
cs_Garno
Messages postés
36
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
14 janvier 2009
-
Quel est l'avantage d'utiliser un fichier XML plutôt qu'une table MySQL dans ce cas-ci ? Moi j'utilise XML seulement lorsque j'ai besoin de portabilité comme pour les fichiers de langue ou les configurations selon les styles de site. Mais ici je ne vois pas du tout l'utiliter d'un fichier XML. Est-ce que vous pouvez m'éclairer :) ?

Sinon c'est une bonne source qui aide a comprendre le fonctionnement des modules mais il y a seulement l'élément XML qui me chicotte.

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.