SPIP Ajax, ou se faciliter la vie dans l’admin

Ce plugin propose un certain nombre de méthodes très simples, en ajax, à utiliser pour pouvoir récupérer des fonds , appeler des fonctions... dans l’admin de SPIP.

Grâce à une méthodologie javascript assez simple et un traitement en php original vous pourrez très facilement améliorer l’utilisation de méthodes ajax dans l’admin de SPIP.

L’article de présentation se veut très court car en même temps que vous pouvez télécharger ce plugin, vous pouvez également installer le plugin spip_ajax_demo qui contient plusieurs exemple ainsi qu’un descriptif des fonctionnalités du plugin spip_ajax.

SÉCURITE : pour faire face à des problèmes de sécurité importants le plugin spip_ajax doit être configuré. Tout d’abord les fichiers du répertoire inc du noyau de spip ne sont pas accessibles. Les autres fichiers inc/mon_fichier.php
ne sont accessibles que si les droits ont été ouverts sur ce répertoire. Pour cela il faut aller dans le fichier sa_pipeline.php (à la racine du plugin) et faire renvoyer par la fonction get_droit_spip_ajax le tableau contenant les autorisations.

Voici un exemple ci dessous :

function get_droit_spip_ajax(){
	return array("test"=>array("statut"=>"admin_restreint"),
			"suite"=>array("statut"=>"aucun","allowed"=>"2,5"),
                        "essai"=>array("statut"=>"admin","allowed"=>"14,8")
				);
}

Cela se comprend de la manière suivante : les fonctions de la page inc/test.php sont accessibles aux admin_restreint (et ceux qui ont plus de droits donc les admin également).
Le renseignement du statut est obligatoire , et il peut avoir comme valeur : tous, admin, admin_restreint , aucun.
La ligne suivante définit les droits sur le fichier inc/suite.php. Ici personne n’a de droits sauf pour les utilisateurs ayant les id_auteur 2 et 5 (on peux mettre autant de id que l’on souhaite en les séparant par une virgule). On peux également mixer les droits comme pour les droits du fichier ’essai’.

En installant ces 2 plugins vous devriez rapidement pouvoir maitriser spip_ajax. Le plugin de démo (ce plugin n’est pas à jour sur les questions de sécurité mais vous pouvez consulter la doc) rajoute également dans la partie édition de rubrique de l’admin de spip une petite fonctionnalité. Pour accéder à la démo voici le lien dans l’admin :
_ ?exec=spip_ajax_demo. (vous avez également un raccourci dans le menu ’Édition’).

Pour essayer de vous mettre en appétit je présenterai 2 petits exemples qui nécessitent le plugin spip_ajax. Ces exemples reprennent 2 cas présents sur le plugin de démo « spip_ajax_demo ».

- Exemple 1 : utiliser la méthode recuperer_fond de spip via l’ajax

Vous souhaitez par exemple dans la page d’accueil d’une rubrique connaître les différents auteurs ayant participé à cette rubrique. Pour que cela ne soit pas chargé d’office, un bouton va permettre d’afficher (via ajax ) la liste de ces auteurs.
-  Créez votre plugin en déclarant le pipeline ’affiche_droite’ et le pipeline ’header_prive’ dans votre fichier plugin.xml.
-  dans la fonction du plugin qui intercepte ’header_prive’ incluez le js qui va servir pour votre plugin, pour cet exemple le fichier js va se nommer monjs.js
-  dans la fonction du plugin qui intercepte ’affiche_droite’ renvoyez la présentation qui vous convient avec sur un élément html qui possède un évènement onclick. Par exemple onclick=’liste_auteur_rubrique()’. Et un élément DOM dont l’id (pour cet exemple mais vous êtes libre de votre choix) est ’liste_auteur_rubrique’
-  maintenant venons en au code javascript que vous placez dans monjs.js :

function liste_auteur_rubrique(){
	spip_ajax.req = {
		id_rubrique : spip_ajax.get("id_rubrique"),
		recup_fond :"liste_auteur_rubrique" ,
		args_fond : "id_rubrique",
		refresh : "#liste_auteur_rubrique",	
	}
	spip_ajax.ajax();
}

-  spip_ajax_reqest la ’requête’ qui va être envoyée côté serveur. C’est un objet javascript dont les propriétés sont dans notre cas id_rubrique, recup_fond,args_fond et refresh. id_rubrique va récupérer la valeur id_rubrique présente dans l’url. recup_fond indique que vous souhaitez récupérer le fond ’liste_auteur_rubrique’. Il s’agit ici d’un fond très simple avec 2 boucles imbriquées (présent dans le plugin de démo). args_fond indique l’(les) argument(s) que vous souhaitez passer à votre squelette, ici on souhaite passer l’id_rubrique , enfin refresh indique l’élément DOM qui va être mis à jour une fois le click effectué. Ici il s’agit de l’id ’liste_auteur_rubrique’.

-  spip_ajax.ajax() : est la fonction qui va envoyer cette requête ajax et qui effectuera le(les) traitement(s) . Ici on ’refresh’ un élément html , mais d’autres possibilités s’offrent à vous.

- Exemple 2 : appeler une fonction présente dans les répertoires ’inc’

exemple de code pour appeler une fonction située dans un plugin et dans le répertoire inc/suite.php . Dans ce répertoire copier/coller la fonction couper de spip.

/* On appelle la méthode couper de spip dans le fichier inc/suite.php */ 
function couper_demo(){
	spip_ajax.req = {
		val : $("#texte_couper").val(),
		taille : 60,
		fin : ' coucou <br>',
		inc :"suite" ,
		fct : "couper",
		args_fct : "val,taille,fin",
		append : "#resultat_couper"	
	}
	spip_ajax.ajax();
}

-  ici on récupère le texte dans la propriéte val, la propriété taille indique que l’on souhaite avoir les 60 premiers caractères et la propriété fin indique que l’on souhaite finir le texte par coucou et un retour à la ligne,. Ces arguments sont listés dans : args_fct
-  la propriété inc indique que nous avons besoin d’inclure le fichier inc/suite
-  la propriété fct indique que nous allons utiliser la fonction ’couper’ avec les arguments déclarés précédemment.
-  la propriété append indique qu’une fois le texte coupé récupéré on souhaite le rajouter à la fin de l’élément DOM dont l’id est ’resultat_couper’.

Conclusion

J’espère que ces 2 premiers exemples vous auront intéressé. Grâce au plugin spip_ajax_demo vous retrouverez ces 2 exemples ainsi que quelques autres. Vous avez également une documentation complète sur les fonctions de spip_ajax.
En espérant que cela vous aidera pour vos futurs développements.

En remerciant l’ensemble de la communauté spip pour l’ensemble de ses contributions.

Si vous avez des commentaires ou des avis cela sera avec grand plaisir. Et n’hésitez pas à me faire part de vos avis si vous utilisez ce plugin. Merci !!!

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom