inclusion javascript et modèle

Bonjour,
  voici ma question du jour : j’ai créé un modèle qui nécessite l’exécution d’un script javascript de quelques lignes. Ca me semble dommage de le recopier à chaque fois que le modèle est invoqué dans la page, alors j’ai choisi de le mettre dans les inclusions globales. Mais si je pousse mon raisonnement jusqu’au bout, l’inclusion de ce script javascript lorsque le modèle n’est pas du tout présent dans la page est tout aussi absurde.
  Donc j’ai une question : est-ce qu’il y a un mécanisme ou une technique pour n’inclure un javascript que lorsque un modèle est invoqué dans une page ?

  En vous remerciant,
     Mikhaël

Le 04. 12. 17 à 13:03, Mikhaël MYARA a écrit :

Bonjour,
   voici ma question du jour : j’ai créé un modèle qui nécessite l’exécution d’un script javascript de quelques lignes. Ca me semble dommage de le recopier à chaque fois que le modèle est invoqué dans la page, alors j’ai choisi de le mettre dans les inclusions globales. Mais si je pousse mon raisonnement jusqu’au bout, l’inclusion de ce script javascript lorsque le modèle n’est pas du tout présent dans la page est tout aussi absurde.
   Donc j’ai une question : est-ce qu’il y a un mécanisme ou une technique pour n’inclure un javascript que lorsque un modèle est invoqué dans une page ?

   En vous remerciant,
      Mikhaël

Pourquoi ne pas mettre le js directement dans le modèle?

Hello,

pourquoi ne pas, dans un premier temps, mettre le JS dans le modèle lui
même ? C'est pas optimal, mais ça facilite la maintenace.

Maïeul <maieul@maieul.net> writes:

Le 04. 12. 17 à 13:03, Mikhaël MYARA a écrit:

Bonjour,
   voici ma question du jour : j’ai créé un modèle qui nécessite l’exécution d’un script javascript de quelques lignes. Ca me semble dommage de le recopier à chaque fois que le modèle est invoqué dans la page, alors j’ai choisi de le mettre dans les inclusions globales. Mais si je pousse mon raisonnement jusqu’au bout, l’inclusion de ce script javascript lorsque le modèle n’est pas du tout présent dans la page est tout aussi absurde.
   Donc j’ai une question : est-ce qu’il y a un mécanisme ou une technique pour n’inclure un javascript que lorsque un modèle est invoqué dans une page ?

   En vous remerciant,
      Mikhaël

Pourquoi ne pas mettre le js directement dans le modèle?

_______________________________________________
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 : http://listes.rezo.net/mailman/listinfo/spip

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

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

Le 05/12/2017 à 10:06, Debondt Didier a écrit :

Hello,

pourquoi ne pas, dans un premier temps, mettre le JS dans le modèle lui
même ? C'est pas optimal, mais ça facilite la maintenace.

bonjour,
parce qu'un modèle (ou une noisette -même problème-) peut etre utilisé plusieurs fois sur une même page ?
triton

oui c’est cela. Mon modèle peut être utilisé plusieurs fois sur la même page donc ca revient à dupliquer le code.
Bon là j’ai mis le javascript dans un header pour limiter le volume de ce qui est dupliqué, mais je pensais qu’il y avait une astuce pour éviter de l’inclure tout court dans le header si la page entière ne contient aucun appel à ce modèle. Par exemple : si on pouvait créer des variables globales, la première fois que le modèle est invoqué il copie le script et place un drapeau qui l'indique, et les appels suivant inhibient l’inclusion en consultant la dite variable. Mais je ne suis pas sûr du tout que l’on puisse faire des globales en SPIP, du moins je ne sais pas faire.

Le 5 déc. 2017 à 10:24, triton <triton@pointcentral.net> a écrit :

Le 05/12/2017 à 10:06, Debondt Didier a écrit :

Hello,

pourquoi ne pas, dans un premier temps, mettre le JS dans le modèle lui
même ? C'est pas optimal, mais ça facilite la maintenace.

bonjour,
parce qu'un modèle (ou une noisette -même problème-) peut etre utilisé plusieurs fois sur une même page ?
triton
_______________________________________________
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 : http://listes.rezo.net/mailman/listinfo/spip

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

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

Le 05/12/2017 à 11:54, Mikhaël MYARA a écrit :

oui c’est cela. Mon modèle peut être utilisé plusieurs fois sur la même page donc ca revient à dupliquer le code.
Bon là j’ai mis le javascript dans un header pour limiter le volume de ce qui est dupliqué, mais je pensais qu’il y avait une astuce pour éviter de l’inclure tout court dans le header si la page entière ne contient aucun appel à ce modèle. Par exemple : si on pouvait créer des variables globales, la première fois que le modèle est invoqué il copie le script et place un drapeau qui l'indique, et les appels suivant inhibient l’inclusion en consultant la dite variable. Mais je ne suis pas sûr du tout que l’on puisse faire des globales en SPIP, du moins je ne sais pas faire.

Pour les noisettes, avec le même cas de figure à résoudre, je mets ça dans mon header :
<BOUCLE_noisettes(NOISETTES){type IN #ENV{type},defaut}>
[(#NOISETTE|unique|oui)
[(#SET{noisettecss,#NOISETTE.css})]
[(#SET{noisettejs,#NOISETTE.js})]
[<link href="(#CHEMIN{noisettes/css/#GET{noisettecss}}|compacte)" rel="stylesheet" type="text/css"/>]
[<script src="(#CHEMIN{js/#GET{noisettejs}}|compacte)" type="text/javascript"></script>]
]
</BOUCLE_noisettes>
mais pour les modeles, y a pas de tables dédiées, donc je sais pas trop...
triton

Est-ce qu'un truc du genre dans le squelette ferait l'affaire ?
[(#TEXTE|pregmatch{nom_du_modele}|oui)
Ici l'inclusion du javascript
]
syntaxe à vérifier, mais, bon, ce serait l'idée...

Le 05/12/2017 à 12:30, Manu a écrit :

Est-ce qu'un truc du genre dans le squelette ferait l'affaire ?
[(#TEXTE|pregmatch{nom_du_modele}|oui)
Ici l'inclusion du javascript
]
syntaxe à vérifier, mais, bon, ce serait l'idée...

suis pas sur, mais je pense que le nom du modele ne se trouve plus dans #TEXTE qui s'est déjà fait copieusement compiler...
amicalement
triton

Pas certain, mais il me semble que tu peux faire #TEXTE**

[(#TEXTE**|pregmatch{nom_du_modele}|oui)
Ici l'inclusion du javascript
]

Cela ne devrait pas compiler les modèles.
A tester !

triton <triton@pointcentral.net> writes:

Le 05/12/2017 à 12:30, Manu a écrit:

Est-ce qu'un truc du genre dans le squelette ferait l'affaire ?
[(#TEXTE|pregmatch{nom_du_modele}|oui)
Ici l'inclusion du javascript
]
syntaxe à vérifier, mais, bon, ce serait l'idée...

suis pas sur, mais je pense que le nom du modele ne se trouve plus dans
#TEXTE qui s'est déjà fait copieusement compiler...
amicalement
triton
_______________________________________________
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 : http://listes.rezo.net/mailman/listinfo/spip

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

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

Le 05/12/2017 à 11:35, Mikhael Myara a écrit :

oui c’est cela. Mon modèle peut être utilisé plusieurs fois sur la même page donc ca revient à dupliquer le code.

Ah je retombe par hasard sur ce bout de code :

#SET{charge,non}
code de la noisette ou du modèle

<BOUCLE_js_charge(CONDITION){si #GET{charge}|!={oui}}>
<script>
mon script
</script>
#SET{charge,oui}
</BOUCLE_js_charge>

le script ne sera produit qu'une seule fois même si le modèle/noisette est appelé plusieurs fois sur la page

amicalement
triton

Ok je vais essayer. Ca me semble surprenant, il me semblait que les variables crées avec #SET n’avaient pas de portée au du script en cours. Je dois comprendre que les commandes SET et GET gèrent en réalité des variables globales ?

Le 7 déc. 2017 à 15:48, triton <triton@pointcentral.net> a écrit :

Le 05/12/2017 à 11:35, Mikhael Myara a écrit :

oui c’est cela. Mon modèle peut être utilisé plusieurs fois sur la même page donc ca revient à dupliquer le code.

Ah je retombe par hasard sur ce bout de code :

#SET{charge,non}
code de la noisette ou du modèle

<BOUCLE_js_charge(CONDITION){si #GET{charge}|!={oui}}>
<script>
mon script
</script>
#SET{charge,oui}
</BOUCLE_js_charge>

le script ne sera produit qu'une seule fois même si le modèle/noisette est appelé plusieurs fois sur la page

amicalement
triton

_______________________________________________
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 : http://listes.rezo.net/mailman/listinfo/spip

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

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