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'});