Ne pas inclure plusieurs fois un même javascript

Résolu
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008 - 22 avril 2008 à 14:21
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008 - 24 avril 2008 à 08:53
Bonjour

J'ai un systeme (en PHP) ou j'importe plusieurs éléments differents (principalement d'autres pages php).
La plupart du temps ces pages php utilisent les meme fichiers fonctions javascript, je les ai donc regroupées dans un fichier commun.

Il existe des pages ou je n'utilise aucun éléments et donc je n'ai pas besoin d'apeler ce fichier (sa serait pas drôle sinon :p )
Je cherche donc un moyen de trouver si le fichier à déjà été inclus, ne pas le faire reapeler par un autre élément.

J'ai commencé en creant une variable globae qui teste si tel ou tel fichier à deja été inclus, mais à la longue ce n'est pas propre. En effet si dans chaque élément je dois tester cette variable avant de pouvoir inclure un fichier, ce n'est pas pratique.

J'ai aussi pensé à tester dans le fichier javascript par lui meme s'il avait deja été apelé avec des variables globales, mais sa ne m'inspire pas.

Quelqu'un à t-il deja eu ce genre de probleme, et trouvé une solution viable?

Merci d'avance
Ro

23 réponses

Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
24 avril 2008 à 08:53
C'est Re moi.

On m'a dit que le passage de variables avec le mot clé 'global' n'existerait probablement plus d'ici le php6, donc je reste sur l'avant dernière solution (chaque élément déclare le managerElement dans GLOBALS s'il n'existe pa et lui passe ses includes, que ce soit *.css ou *.js au moins je suis tranquille, et c'est lui qui gerera les doublons, et rendra le code html pour l'inclusion finale)

Une petite amélioration est possible en faisant de l'élément manager une classe singleton, pour ne pas tester l'existance du manager au début de chaque élément et n'avoir qu'une seule instance de managerElement. Je vais d'abord mettre en place la première version avant de pouvoir optimiser de cette manière.

Merci pour vos réponses
Ro
3
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 14:30
Pourquoi ne pas créer un fichier php contenant tout les includes que tu inclut dans tout tes fichiers ???

Si t'a besoin d'aide, MP !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 14:32
Au fait, j'avais oulié : "bonjour", désolé pour le double post !!!

Si t'a besoin d'aide, MP !!!
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 14:55
Salut :)
Merci de cette réponse, mais sa me parait pas logique mais peut etre n'ai-je pas compris ton point de vue.

Tous mes fichiers, que j apelle élément pour differencier, (ils contiennent des fonctions ou des classes) peuvent être inclus dans mon fichier Php ( une sorte de constructeur à l'aide des elements).

Si dans tous mes éléments, j'apelle tous les include, une fois dans le fichier Php je vais avoir pas mal de déclarations inutiles et qui vont probablement lever des exceptions.

Pour re expliquer peut etre mieux, un schema:

PAGE PHP      |      ELEMENTS      |      JS COMMUN (plusieurs fic differents)

Mes elements utilisent chacun des fichier de la réserve JS COMMUN ( pas forcement les meme, mais sa peut aussi bien l etre.)
J'ai une multitude d'elements differents, une sorte de bibliotheque pour creer des PAGE PHP (dans une page j apelle une/des fonction(s) php définie(s) dans les elements).

Mon probleme est que si j utilise des elements qui utilisent un meme JS COMMUN, alors j'aurais plusieurs fois le meme code.

Enfin il se peut que je n'utilise aucun element dans une PAGE PHP, donc je ne veux pas l'inclure par défaut.

Je sais pas si tu avais compris comme sa.

Ro
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 15:03
ok, je vois mieux, je viens de faire une grosse boulette, je croyais que tu voulais inclure tout tes fichiers sur toutes tes pages !!!

Tu peus peut être utiliser des sessions, je m'explique : si ton fichier est inclus alors tu créer une variable de session qui contient true sinon sois tu n'en créer pas sois tu en créer une qui contient false !!! Après sois tu test le contenue de tes session, sois tu test l'existance de la variable même !!!

J'èspère ne pas avoir fait d'autre boulette !!!

a++

Si t'a besoin d'aide, MP !!!
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 15:08
Re

L'idée est pas mal, mais sa pose un probleme dans mon cas.
dans JS COMMUN, j 'ai plusieurs fichiers.
(ils sont découpés par utilité, requete ajax, affichage personnalisés...)

A terme je pense que j aurais une dizaine de fichiers de ce genre.
Il me faudrait donc autant de variables. Pas Coules :(

Je réfléchis peut etre à un tableau associatif global (php) avec un booleen et une fonction qui servirait de manager pour inclure (ou non ) et mettre à jour le tableau.

A voir

Ro
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 15:13
oui, j'ai failli te proposer un tableau mais je n'était pas sur que les tableau pouvaient se conserver entre les pages comme des sessions !!!

Si t'a besoin d'aide, MP !!!
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 15:18
Je pense que oui, puisque  je viens de commencer à mettre en oeuvre une solution de ce genre.
Sa fonctionne, mais j'ai l impression qu'on peut faire mieux.

Je sais pas trop de quel maniere.
Je vais voir si je peut trouver quelque chose.

Merci
Ro
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 15:22
de rien, si tu trouve la solution met la en réponse accèpté !!!

Si t'a besoin d'aide, MP !!!
0
cephalic Messages postés 38 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 25 avril 2008
22 avril 2008 à 15:59
Bonjour.
Si j'ai bien compris ton problème tu peux utiliser include_once().
Il agit comme include() mais vérifie avnt que le fichier n'a pas déjà été inclut.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 16:01
mince, comment ai-je pu ne pas y penser plus tot !!!

Si t'a besoin d'aide, MP !!!
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 16:08
C'est bien sa que je veux faire mais avec des fichiers javascript
(cad avoir le code construit <script ...></> quelque fois, il y a aussi un css 'attaché' au javascript avec le meme nom)

Bon sinon il faudrait un moyen de detourner par du php, dans l immediat je ne vois pas de solution.

Ro
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
22 avril 2008 à 16:09
Rorix, ce n'est pas en écoutant les conseils de Nicomilville que tu t'en sortiras avec quelque chose de propre, fais-moi confiance, il s'y connaît moins que toi en prog.

Le include_once vaut pour les fichiers php. Si j'ai bien compris l'idée de Cephalic, cela voudrait dire créer un fichier .php par fonction JS, ça ne ma parait pas optimal.

C'est plutôt tes différents éléments php qui ne devrait pas s'occuper de déclarer la fonction javascript, mais simplement faire un appel. Et au moment de construire, si un ou plusieurs appels ont été lancés sur une fonction javascript, tu l'inclus. Je ne sais pas si je suis clair ?

à+
0
cephalic Messages postés 38 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 25 avril 2008
22 avril 2008 à 16:10
Désolé pour le double post mais ce n'est pas des fichiers php que tu veux include alors ma réponse n'est pas bonne.
Desolé
0
cephalic Messages postés 38 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 25 avril 2008
22 avril 2008 à 16:14
Mais le mieux serait je pense de restructurer ton application pour ne pas avoir ce problème.
tu dois pouvoir contourner ce problème autrement.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 16:18
Re,

@Rorix83 = c'est vrai que je me trompe souvent mais j'ai aussi aidé beaucoup de personne !!!

@Evangun = ce n'est pas en jugeant les gens que l'onaide les autre maintenant si ça t'amuse de me dévaloriser devant tout le monde, continue, je n'en ai rien a faire !!!

Si t'a besoin d'aide, MP !!!
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
22 avril 2008 à 16:24
Nicomilville, ce n'est pas pour te dévaloriser en soi, c'est pour que les gens sachent que tu leurs donneras de mauvaises solutions et donc pour qu'ils en cherchent d'autres.
Dans l'idéal oui à mon avis tu devrais arrêter de poster sur ce forum et revenir dans quelques années quand tu auras progressé, mais on en a déjà parlé, je ne reviendrai pas dessus. Si tu ne veux pas comprendre tant pis.
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 16:25
> Evangun

Oui, je vois ce que tu veux dire, j y avais pensé, mais je l'avais mis de coté ne voyant pas comment l'implementer.
Concretement c'est sa que je veux faire. Arriver a faire remonter le nom des fichiers a inclure a la page PHP et la laisser faire sa comme il faut.

Si je résume
- il faut creer le tableau de variables (le booleen et les path js/css)
- avoir acces au tableau dans tous les elements pour mettre a jour le booleen et les chemins par la suite.


une fois dans la page php.
- On declare notre tableau
- On inclut tous les elements, qui vont mettre à jour le tableau
- enfin une fonction qui parcourt le tableau et m inclut proprement mes fichiers
(c est une grosse architecture c est pour sa que je tiens au proprement :))

Pour recuperer les chemins, au moment de mettre à jour le booleen, je remplit aussi un sous tableau
['element']['isInclude']
['element']['css_path']
['element']['js_path']

Voila comment j imagine sa, maintenant : Peut on faire plus ordonné?

Merci d'avance

Rorix
0
Rorix83 Messages postés 18 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 décembre 2008
22 avril 2008 à 16:27
Pour Nico : Je pense bien que nous avons pas le meme niveau de programmation, mais toutes les idées m'interessent, il faut juste trouver la maniere de les implementer, la est la difficulté à mon avis.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
22 avril 2008 à 16:28
@Evangun = je poste déjà beaucoup moins depuis ton message sur phpcs, je post un peu plus sur javascriptfr.com, mais arrèter de poster totalement c'est hors de question, ce n'est pas parce que je suis jeune que je suis un iniorant alors ...

Si t'a besoin d'aide, MP !!!
0
Rejoignez-nous