Exécuter un code javascript sous certaines conditions
Page 1 sur 1 • Partagez
Exécuter un code javascript sous certaines conditions
Exécuter un code Javascript sous certaines conditions |
Le Javascript est un langage de script qui permet à son exécution de modifier des éléments de la page. Il est possible de mettre des codes Javascript dans le Panneau d'administration pour qu'ils soient exécutés sur le forum (voir Gestion des codes Javascript). Accessibilité aux éléments de la page par le code JavascriptLe code javascript a accès à tout les éléments existant avant là où il se trouve, les codes javascript mis dans le panneau d'administration sont mis dans la partie <head> ... </head> du forum (où on spécifie l'adresse de la feuille de style, le titre de la page, l'encodage de la page), ce qui veut dire que le script n'a accès au départ à aucun des éléments du contenu de la page (vu qu'ils se trouvent après). Comment accéder aux éléments se trouvant après le script ?C'est assez simple, il suffit de retarder l'exécution du code. Il y a moyen de le faire avec des dispositifs de base de Javascript, mais en les utilisant mal (et beaucoup de scripts existants les utilisent mal), deux scripts auraient de fortes chances de ne pas fonctionner l'un avec l'autre. Alors plutôt que d'utiliser ce moyen, il est préférable d'utiliser celui fourni par jQuery (qui est une bibliothèque de javascript disposant de fonctions simplifiant les actions à faire pour arriver au résultat voulu). En jQuery pour retarder l'exécution du code à quand tout les éléments de la page existent, il suffit de mettre :
Le code que vous mettez à la place de /* votre code javascript */ sera exécuté à la fin de la page ( c'est à dire quand tout les éléments de la page existent et sont accessibles par le code ). Pourquoi ne pas le faire automatiquement sur tout les codes ?De nombreuses raisons peuvent faire que votre script n'a pas besoin d'accéder aux éléments de la page, par exemple, si le titre de page est Poster un nouveau sujet et que nous souhaitons le remplacer par Ouvrir un nouveau topic de discussion, il suffit de mettre ce script :
Et pas besoin de le retarder, ça fonctionne bien juste comme cela. Comment mettre une condition sur le code ?C'est très simple il suffit de mettre :
Comment faire une condition ?Il suffit de mettre un élément, il sera évalué et suivant sa valeur la valeur de la condition sera vrai ou faux. Ce qui est vrai :
Ce qui est faux :
Pour comparer 2 valeurs (et que le résultat donne vrai ou faux) il faut utiliser un opérateur de comparaison parmi les suivants :
Comment combiner plusieurs conditions ?Vous pouvez soit combiner plusieurs if, par exemple :
Ou bien il y a des opérateurs qui permettent de combiner une condition à l'autre :
Ainsi l'exemple de juste au dessus pourrait s'écrire simplement :
ExemplesVous avez tout ce qu'il vous faut pour exécuter un code javascript sous certaines conditions, mais voici quelques exemples pour mettre cela en application. Changer la bannière si on est sur le sujet 40 :Tout d'abord, il faut mettre le script juste sur les pages de sujet. Ensuite chaque sujet à un numéro qu'on retrouve dans l'adresse de la page, par exemple /t40- pour le sujet 40 (ou /t40p15- pour une page du sujet). Tout les éléments concernant la page, se trouve dans l'objet document, ce qui nous intéresse dedans est document.location qui a plusieurs propriétés concernant la page sur laquelle on se trouve, par exemple si on était sur https://forum.forumactif.com/h3-tutoriels?test#bonjour, voici les propriétés qu'il y aurait :
Grâce à ces variables on a moyen de récupérer l'adresse de la page sur laquelle on est (ensuite il suffit de la tester pour voir si on est sur la bonne page), ici donc les adresses pourraient être :
Donc il faut que notre test fonctionne avec tout cela. On ne peut pas faire simplement un test d'égalité car si le sujet fait 4 pages il faudrait déjà faire :
Et si il en fait 200 n'en parlons pas. Donc plutôt que d'utiliser cela on va utiliser les expressions régulières (des "modèles" pour lesquels on peut tester si une chaîne de caractère y correspond ou pas). Pour faire une expression régulière il suffit de mettre :
Et on peut l'utiliser de plusieurs façons, pour ce qu'on veut faire on peut l'utiliser de cette façon :
Si l'expression régulière /test/ est trouvée dans la chaîne, vrai est renvoyé sinon faux est renvoyé. Donc il nous suffit de trouver une expression régulière qui correspond à l'url de la page et ce sera notre condition pour exécuter le code. L'expression régulière qui convient ici si on teste le document.location.pathname (donc /t40p2145-nom-du-sujet) est :
Le ^ permet de signifier ce que je trouve doit commencer par ce qui suit, le \/ c'est juste pour chercher le / (vu que c'est le caractère qui signale la fin de l'expression régulière on doit mettre \/ pour l'utiliser dedans), ensuite le (contenu)?, les parenthèse permettent juste de sélectionner une partie, et le ? signifie ce qui précède doit être présent ou pas (donc le contenu de la parenthèse est facultatif), le [1-9], le [ et ] signifie une des lettres qui me compose (donc par exemple aaa[edc]bbb ça trouvera aaaebbb, aaadbbb et aaacbbb), le trait d'union à l'intérieur et entre deux caractère signifie "et tout ce qu'il y a entre" (donc [1-7] c'est pareille à mettre [1234567]) et puis pour finir le * signifie ce qui précède est présent 0 ou plusieurs fois. Donc si on voulait exprimer ce que fait le /^\/t40(p[1-9][0-9]*)?-/ ce serait trouver les chaînes de caractères qui commencent par /t40 après quoi il peut y avoir p1 à p9999... (autant qu'on veut) après quoi il y a un trait d'union. Donc on a notre code final :
Pour ce qui est du code pour changer la bannière, le $("selecteur") (de la librairie jQuery inclue sur les forum Forumactif) permet de sélectionner des éléments par un sélecteur CSS, le sélecteur #pun-logo,#i_logo,#logo img permet de sélectionner la bannière (#i_logo celle de PhpBB2, #logo img celle de PhpBB3 et Invision et #pun_logo celle de... PunBB), ensuite à cette sélection d'élément on peut faire un peu tout ce qu'on veut, nous on utilise la méthode attr("nom de l'attribut","valeur qui doit lui être mise") qui permet de modifier la valeur d'un attribut afin de changer l'adresse de l'image dans notre cas. Plus d'informations sur les expressions régulières : Plus d'informations sur les sélecteurs d'élément en jQuery : Plus d'informations sur la méthode attr() de jQuery : Mettre une alerte "hello amigo" à un membre qui n'avait pas visité le forum depuis 24hTout d'abord pour savoir si un membre est connecté ou pas, on peut utiliser le lien de déconnexion de la barre de menu, il est comme ceci :
Et n’apparaît évidemment que si on est connecté, on peut le sélectionner facilement avec $("#logout") et il y a la propriété length de jQuery qui peut nous renvoyer combien d'éléments sont sélectionnés (donc si on est connecter $("#logout").length renverra 1, et si on est déconnecté cela renverra 0). Ensuite pour savoir si le membre n'a pas ouvert de page depuis 24h, il suffit à chaque page ouverte d'enregistrer un cookie avec la date. Pour avoir la date il faut faire new Date() qui nous renvoie un objet Date contenant la date actuelle (et pour le transformé en entier qui sont plus facile à utiliser, il suffit de mettre un + devant). Forumactif inclut des fonctions pour lire et écrire des cookies sur ses forums. Il suffit de faire my_setcookie("nom du cookie","valeur",1,0) pour écrire un cookie et my_getcookie("nom du cookie") pour lire un cookie (si on lit un cookie qui n'existe pas, la valeur null sera renvoyée). On a tout ce qu'il nous faut, voici le code pour résoudre notre désir :
Pour plus d'information sur la propriété length de jQuery : Afficher un message à l'écriture d'un nouveau sujet dans le forum 6, 7 et 8Cette fois encore, il faut faire en fonction de l'adresse, l'adresse pour écrire un message dans le forum 7 est :
Donc il faut que le .document.location.pathname soit ./post et que le .document.location.search soit .?f=7&mode=newtopic ou .?f=8&mode=newtopic ou .?f=9&mode=newtopic, on a ainsi déjà notre condition :
Il faut mettre \? à la place de ? quand on veut le chercher, car ? est un caractère spécial, et le $ signifie ce qui précède doit finir la ligne. Il nous reste juste à mettre un message, ce qui nous donne :
prepend est une méthode de jQuery qui permet d'ajouter du code html au début d'un élément, aussi il faut faire attention car on met le contenu à afficher sous forme de chaîne javascript, dans une chaîne de texte javascript :
S'il est dans la chaîne, il faut mettre devant le caractère de fin et début (qui est soit ' soit ") un antislash (\). |
Cette astuce a été proposée par Ea. Et actualisée en août 2021. Aucune reproduction possible sans notre accord, conformément à l’article L122-1 du CPI. |
Ea- Aidactif
- Messages : 23583
Inscrit(e) le : 04/04/2008
Sujets similaires
» Code javascript ne fonctionne plus sous certaines conditions
» Exécuter un javascript avec un bouton submit
» Exécuter un script sous condition
» Empecher un code de s'exécuter...
» [ résolu ] panneau coulissant javascript et conditions pour "nouveau MP"
» Exécuter un javascript avec un bouton submit
» Exécuter un script sous condition
» Empecher un code de s'exécuter...
» [ résolu ] panneau coulissant javascript et conditions pour "nouveau MP"
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum