Class Json en Php pour mootools
Par Quentin Ambard le jeudi, avril 16 2009, 21:45 - Bien manipuler Json - Lien permanent
J'ai créé une classe Json en php qui permet de manipuler rapidement et instinctivement les propriétés du DOM et de créer des objets json. La classe nécessite le support de json_encode() (version 5.2 de php)
Voici le code de la classe Json
<?php /* * @project PhPJson * @author : Quentin Ambard * @version : 0.2 * @url http://avriblog.avricot.com * @license MIT Style License */ class Json { private static $json = array() ; private static $jsonDOM = array() ; public static function add($key, $value) { JSON::$json[$key] = $value ; } public static function addArray($key, $value) { JSON::$json[$key][] = $value ; } private static function jsonGetElementDom($idElement, $property, $value) { $nbreE = count(JSON::$jsonDOM) ; $e = NULL ; for ($i=0;$i<$nbreE;$i++) { if(JSON::$jsonDOM[$i]->idElement == $idElement) $e = & JSON::$jsonDOM[$i] ; } if($e == NULL) { $e = & JSON::$jsonDOM[] ; $e->idElement = $idElement ; } return $e ; } public static function addProperty($idElement, $property, $value) { $e = JSON::jsonGetElementDom($idElement, $property, $value) ; $e->property->$property = $value ; } public static function addStyle($idElement, $property, $value) { $e = JSON::jsonGetElementDom($idElement, $property, $value) ; $e->property->styles->$property = $value ; } public static function getEncoded() { //on rajoute les modifications du dom pour qu'elles soient gerées tout à la fin par le js. JSON::$json['DOM'] = JSON::$jsonDOM ; return json_encode(JSON::$json); } public static function error($error) { $e->erreur = $error ; die(json_encode($e)); } } ?>
Grace à mootools on récupère directement l'objet Json généré par php et execute directement les changements sur le DOM ! Voici un petit exemple d'utilisation avec mootools et la fonction set():
var ParseurJson = function() { this.erreur = function(_erreur){ alert('ceci est une erreur :'+_erreur); } this.info = function (_info){ alert('ceci est une info:'+_info); } this.DOM = function (_DOM){ //On parcours tous les elements à modifier : var i=0; while(typeof(_DOM[i]) != "undefined"){ //Si on modifie les proprietée de l'element if(typeof(_DOM[i].property) != "undefined"){ $(_DOM[i].idElement).set(_DOM[i].property); } i++; } } this.parseJson = function (_json) { var i ; for (i in _json) this[i] (_json[i]); } this.request = function (_page, _variable){ var requete = new Request.JSON({url: _page}); requete.addEvent('onSuccess', this.parseJson.bindWithEvent(this)); requete.post(_variable); }
Il ne vous reste plus qu'à utiliser directement la classe en PHP. Par exemple testJson.php qui sera appelé en ajax :
//pour modifier le contenu innerHTML via mootools JSON::addProperty('id de l\'element à modifier', 'html', 'nouveau contenu') ; //pour modifier le src d'un element JSON::addProperty('id de l\'element à modifier', 'src', 'nouveau lien') ; //pour modifier le style d'un element JSON::addStyle('id de l\'element à modifier', 'display', '') ; JSON::addStyle('id de l\'element à modifier', 'color', '#FFF') ; //Pour envoyer une info : JSON::add('info', 'valeur de "valeurDeTest" recu : '.$_POST('valeurDeTest')) ; //fait un alert() affichant 'valeur de "valeurDeTest" recu : toto' //pour creer un objet contenant plusieurs sous-objet et les rajouter au fur et a mesure via php //A noter que vous pouvez aussi directement passer un array en utilisant addJson(), mais des fois addJsonArray() se revele bien pratique ! JSON::addArray('nom de l\'array', 'var 1') ; JSON::addArray('nom de l\'array', 'var 2') ; //on ecrit l'ensemble du json generé echo JSON::getEncoded();
et ensuite on appelle la page en ajax par exemple :
var parseurJson= new ParseurJson{) ; parseurJson.request ('testJson.php', {valeurDeTest: 'toto', valeurDeTest2: 'toto2'});
Commentaires
Rolex Watches and What You Know Before Buying One
Can the price be justified? Now is it justifiable to pay such exorbitant prices for one item? Yes, it is. Why do I say that? I for one cannot deny you from wondering why this is so, but when you at it, you come across just by chance a watches
http://www.replicasrolexwatches.us/
http://www.voguesking.us
http://www.handbagshermes.org.uk
http://www.replicacartierhandbags.n...