Hello,
actuellement SPIP permet d'implémenter facilement des inclusions rafraichies en ajax grace a <INCLURE{}{ajax}>
De meme il est facile de faire un formulaire CVT ajax gràce à
<div class='ajax'>
#FORMULAIRE...
</div>
Mais il est un besoin assez récurent que l'on ne remplit pas encore simplement,
c'est la possibilité de rafraichir un autre morceau de la page quand un soumet un formulaire ajax ou que l'on clic sur un lien d'une noisette ajax.
J'ai pensé à une API pour faciliter cela, qui repose sur deux points :
* donner un identifiant aux blocs que l'on veut recharger a distance
* déclencher le rechargement des blocs designes par leur identifiant
1. Identifier les blocs ajax
Pour les inclusions, je propose
<INCLURE{}{ajax=identifiant}>
Cela ne rompt aucune compatibilite avec l'existant, et un squelette ecrit avec cette syntaxe fonctionnera a priori sans problème dans les versions précédentes.
L'identifiant n'est pas unique, et peut être le même pour plusieurs blocs, ce qui définit un groupe de blocs.
Pour les formulaires, comme actuellement cela repose sur une simple classe ajax présente sur le conteneur,
je propose que l'on puisse définir cet identifiant par un attribut data-ajaxid sur ce même conteneur :
<div class='ajax' data-ajaxid='identifiant'>
...
</div>
C'est une écriture un peu plus lourde, mais qui ne casse la encore aucune compatibilité.
Le data-ajaxid devra toujours être sur la balise qui porte la classe ajax.
L'identifiant peut être commun a plusieurs blocs, que ce soit indifférement des formulaires ou des inclusions
2. Déclencher le rafraichissement
Dans une inclusion ajax ou un formulaire ajax, on disposerait d'une balise
#RECHARGER_AJAX{id1}
qui déclencherait le rechargement en ajax du ou des blocs portant l'identifiant "id1",
lorsque le bloc contenant cette balise est lui même rechargé en ajax.
la balise peut recharger plusieurs identifiants :
#RECHARGER_AJAX{id1,id2,...}
Elle peut utiliser des identifiants calculés dynamiquement :
#RECHARGER_AJAX{#ENV{reload}}
Elle peut être utilisée de manière conditionnelle :
[(#ENV{reload}|oui) #RECHARGER_AJAX{id1}]
On peut ainsi couvrir une grande variété de scenarii.
3. Rafraichir un bloc, ça veut dire quoi ?
Pour une inclusion, cela veut dire recharger le bloc avec la derniere url avec laquelle il a été chargé. Ainsi si c'est un bloc paginé et qu'on a utilisé la pagination, le bloc sera rechargé en conservant le numéro de la page courante.
Pour un formulaire, c'est un peu plus problématique.
Est-ce que cela veut dire qu'on doit déclencher son submit ? avec le risque de faire une action indésirable si l'internaute a modifié des saisies sans rien soumettre.
Est-ce qu'on doit recharger le formulaire tel qu'a l'origine, avec le risque de perdre des saisies en cours ?
A la reflexion, je pense que dans un premier temps il serait plus sage de ne pas proposer cette possibilité de rafraichir un formulaire, car je crains que cela recouvre trop de scenario différents et compliqués à gérer.
4. Des avis, des questions, des remarques ?
Et là c'est à vous.
Cédric

