Ajax + plugin Notation

Bonjour,

J'utilise le plugin Notation pour noter des Images de document
Chaque article ne comprend qu'une image et appelle le plugin notation
avec le formulaire #FORMULAIRE_NOTATION

ensuite dans une boucle, j'affiche l'ensemble des images des articles
de cette rubrique et j'affiche la note décernée à chacune des
images (donc y compris l'image sélectionnée pour le vote).

La page contient donc
- l'image d'un article choisi
- puis le formulaire notation
- puis un INCLURE de toutes les images de la rubrique
avec la note qui leur a été décernée (dont l'image de l'article
courant)

Je souhaiterai que lorsqu'un vote est décerné à l'image de l'article
présent, l'affichage de la boucle de l'ensemble des images soit mis à
jour.

Pour que la mise à jour apparaisse, je dois aujourd'hui recharger la
page

Ajax est-il mon ami ? et comment

le site en test
https://agora.plandecuques.fr/podium-du-concours-balcons-illumines
Merci
--
*Marc Ferraton*

Le 28/12/2020 à 14:51, lebardix a écrit :
> J'utilise le plugin Notation pour noter des Images de document
> Chaque article ne comprend qu'une image et appelle le plugin notation
> avec le formulaire #FORMULAIRE_NOTATION
> Ensuite dans une boucle, j'affiche l'ensemble des images des articles
> de cette rubrique et j'affiche la note décernée à chacune des
> images (donc y compris l'image sélectionnée pour le vote).
>
> Je souhaiterai que lorsqu'un vote est décerné à l'image de l'article
> présent, l'affichage de la boucle de l'ensemble des images soit mis à
> jour.
> Pour que la mise à jour apparaisse, je dois aujourd'hui recharger la
> page
> Ajax est-il mon ami ? et comment

Tu peux enlever ajax sur les notations :
comme ça le vote rechargera toute la page.

Pour garder ajax sur les notations, il faut recharger le bloc du portfolio en plus.
Pour ça il faut appeler ajaxReload.

Justement je lisais dans les archives cet échange que j'ai consigné et que je reproduis.
C'est pas forcément exactement ce dont tu as besoin mais ça peut être utile.

Charlss :
J'aimerais qu'après validation d'un formulaire, un autre bloc ajax soit
également rechargé.

Le formulaire est dans une div avec la classe ajax, après validation il
est censé se recharger en ajax.
C'est le comportement par défaut, de ce côté à pas de problème.

Mais en l'occurence je souhaite également un rechargement ajax d'un
autre bloc *après* que le formulaire se soit rechargé.

En mettant un onclick="ajaxReload('mon_bloc')" directement sur le
bouton de validation ça a l'air de fonctionner : le formulaire et l'autre
bloc se rechargent bien tous les 2, mais mais je préférerais que
le rechargement se fasse à la fin des traitements du formulaire, et non
au moment où on appuie sur le bouton.

Si je mets le code suivant à la fin de la fonction traiter :
$res['redirect'] = 'javascript:ajaxReload("mon_bloc");';
Ca recharge effectivement le bloc ajax indiqué, mais le formulaire ne
parviens plus à se recharger.

Je fais en sorte que mon formulaire reste éditable après validation
($res['editable'] = true;),
donc je ne peux pas faire le rechargement en me basant sur le distinction
éditable/pas éditable.

Cela dit je viens de voir une variable 'je_suis_poste' en jetant un coup
d'oeil dans #ENV, il y a peut-être moyen de m'en servir pour obtenir le
même resultat.

Finalement, j'utilise une solution proche du [(#ENV{editable}|oui) ... ]
: après validation d'un formulaire une variable 'je_suis_poste' est
automatiquement transmise, donc :

<BOUCLE_ajaxreload(CONDITION){si
#ENV{_pipelines/formulaire_fond/je_suis_poste}|oui}>
<script type="text/javascript">
/*<![CDATA[*/
jQuery(document).ready(function($) {
   ajaxReload('mon_bloc'});
/*]]>*/
</script>
</BOUCLE_ajaxreload>

(https://spip.rezo.narkive.com/QauFC4EP/ajaxreload-apres-validation-d-un-formulaire)

JL

On Mon, 28 Dec 2020 15:14:46 +0100
JLuc <jluc@no-log.org> wrote:

Le 28/12/2020 à 14:51, lebardix a écrit :
> J'utilise le plugin Notation pour noter des Images de document
> Chaque article ne comprend qu'une image et appelle le plugin
> notation avec le formulaire #FORMULAIRE_NOTATION
> Ensuite dans une boucle, j'affiche l'ensemble des images des
> articles de cette rubrique et j'affiche la note décernée à chacune
> des images (donc y compris l'image sélectionnée pour le vote).
>
> Je souhaiterai que lorsqu'un vote est décerné à l'image de
> l'article présent, l'affichage de la boucle de l'ensemble des
> images soit mis à jour.
> Pour que la mise à jour apparaisse, je dois aujourd'hui recharger
> la page
> Ajax est-il mon ami ? et comment

Tu peux enlever ajax sur les notations :
comme ça le vote rechargera toute la page.

Pour garder ajax sur les notations, il faut recharger le bloc du
portfolio en plus. Pour ça il faut appeler ajaxReload.

Justement je lisais dans les archives cet échange que j'ai consigné
et que je reproduis. C'est pas forcément exactement ce dont tu as
besoin mais ça peut être utile.

Charlss :
J'aimerais qu'après validation d'un formulaire, un autre bloc ajax
soit également rechargé.

Le formulaire est dans une div avec la classe ajax, après validation
il est censé se recharger en ajax.
C'est le comportement par défaut, de ce côté à pas de problème.

Mais en l'occurence je souhaite également un rechargement ajax d'un
autre bloc *après* que le formulaire se soit rechargé.

En mettant un onclick="ajaxReload('mon_bloc')" directement sur le
bouton de validation ça a l'air de fonctionner : le formulaire et
l'autre bloc se rechargent bien tous les 2, mais mais je préférerais
que le rechargement se fasse à la fin des traitements du formulaire,
et non au moment où on appuie sur le bouton.

Si je mets le code suivant à la fin de la fonction traiter :
$res['redirect'] = 'javascript:ajaxReload("mon_bloc");';
Ca recharge effectivement le bloc ajax indiqué, mais le formulaire ne
parviens plus à se recharger.

Je fais en sorte que mon formulaire reste éditable après validation
($res['editable'] = true;),
donc je ne peux pas faire le rechargement en me basant sur le
distinction éditable/pas éditable.

Cela dit je viens de voir une variable 'je_suis_poste' en jetant un
coup d'oeil dans #ENV, il y a peut-être moyen de m'en servir pour
obtenir le même resultat.

Finalement, j'utilise une solution proche du
[(#ENV{editable}|oui) ... ] : après validation d'un formulaire une
variable 'je_suis_poste' est automatiquement transmise, donc :

<BOUCLE_ajaxreload(CONDITION){si
#ENV{_pipelines/formulaire_fond/je_suis_poste}|oui}>
<script type="text/javascript">
/*<![CDATA[*/
jQuery(document).ready(function($) {
   ajaxReload('mon_bloc'});
/*]]>*/
</script>
</BOUCLE_ajaxreload>

(ajaxReload après validation d'un formulaire)

JL

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Merci JLuc,

supprimer ajax du formulaire me suffit pour l'instant,
toute la page se recharge c'est bien ...

Je vais appronfondir

--
*Marc Ferraton*

Pour recharger un bloc ciblé, l'exemple date un peu :stuck_out_tongue:
Depuis j'ai adopté l'astuce qui consiste à insérer du javascript dans le message de retour du formulaire.

Un exemple dans le plugin paniers : formulaires/remplir_panier.php · master · spip-contrib-extensions / paniers · GitLab

Il y en a d'autres plus simples dans d'autres plugins, mais je les ai plus en tête là.

Mais bref, pour Notation tu peux faire ça au moyen du pipeline formulaire_traiter.

Le 28/12/2020 à 16:10, lebardix a écrit :

On Mon, 28 Dec 2020 15:14:46 +0100
JLuc <jluc@no-log.org> wrote:

Le 28/12/2020 à 14:51, lebardix a écrit :
  > J'utilise le plugin Notation pour noter des Images de document
  > Chaque article ne comprend qu'une image et appelle le plugin
  > notation avec le formulaire #FORMULAIRE_NOTATION
  > Ensuite dans une boucle, j'affiche l'ensemble des images des
  > articles de cette rubrique et j'affiche la note décernée à chacune
  > des images (donc y compris l'image sélectionnée pour le vote).
  >
  > Je souhaiterai que lorsqu'un vote est décerné à l'image de
  > l'article présent, l'affichage de la boucle de l'ensemble des
  > images soit mis à jour.
  > Pour que la mise à jour apparaisse, je dois aujourd'hui recharger
  > la page
  > Ajax est-il mon ami ? et comment

Tu peux enlever ajax sur les notations :
comme ça le vote rechargera toute la page.

Pour garder ajax sur les notations, il faut recharger le bloc du
portfolio en plus. Pour ça il faut appeler ajaxReload.

Justement je lisais dans les archives cet échange que j'ai consigné
et que je reproduis. C'est pas forcément exactement ce dont tu as
besoin mais ça peut être utile.

Charlss :
J'aimerais qu'après validation d'un formulaire, un autre bloc ajax
soit également rechargé.

Le formulaire est dans une div avec la classe ajax, après validation
il est censé se recharger en ajax.
C'est le comportement par défaut, de ce côté à pas de problème.

Mais en l'occurence je souhaite également un rechargement ajax d'un
autre bloc *après* que le formulaire se soit rechargé.

En mettant un onclick="ajaxReload('mon_bloc')" directement sur le
bouton de validation ça a l'air de fonctionner : le formulaire et
l'autre bloc se rechargent bien tous les 2, mais mais je préférerais
que le rechargement se fasse à la fin des traitements du formulaire,
et non au moment où on appuie sur le bouton.

Si je mets le code suivant à la fin de la fonction traiter :
$res['redirect'] = 'javascript:ajaxReload("mon_bloc");';
Ca recharge effectivement le bloc ajax indiqué, mais le formulaire ne
parviens plus à se recharger.

Je fais en sorte que mon formulaire reste éditable après validation
($res['editable'] = true;),
donc je ne peux pas faire le rechargement en me basant sur le
distinction éditable/pas éditable.

Cela dit je viens de voir une variable 'je_suis_poste' en jetant un
coup d'oeil dans #ENV, il y a peut-être moyen de m'en servir pour
obtenir le même resultat.

Finalement, j'utilise une solution proche du
[(#ENV{editable}|oui) ... ] : après validation d'un formulaire une
variable 'je_suis_poste' est automatiquement transmise, donc :

<BOUCLE_ajaxreload(CONDITION){si
#ENV{_pipelines/formulaire_fond/je_suis_poste}|oui}>
<script type="text/javascript">
/*<![CDATA[*/
jQuery(document).ready(function($) {
    ajaxReload('mon_bloc'});
/*]]>*/
</script>
</BOUCLE_ajaxreload>

(ajaxReload après validation d'un formulaire)

JL

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Merci JLuc,

supprimer ajax du formulaire me suffit pour l'instant,
toute la page se recharge c'est bien ...

Je vais appronfondir