Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Chemins relatifs non fonctionnels

7 réponses
Avatar
Dominique Ottello
Bonjour,

Je suis confronté à un problème de chemin de fichier images dans les
fichiers js, problème qui n'existe pas dans les fichiers css.

Soit :
- mon_site/images/ dossier contenant les images
référencées dans les fichiers ci-dessous
- mon_site/css/lightbox.css (Fichier css)
- mon_site/js/lightbox.js (Fichier javascript)

Dans lightbox.css, on a, par exemple :

.lb-prev:hover {
background: url(../images/prev.png) left 48% no-repeat;
}

Dans lightbox.js, on a, par exemple :

function LightboxOptions() {
this.fileLoadingImage = '../images/loading.gif';
this.fileCloseImage = '../images/close.png';

Dans les deux cas, les chemins des images sont bien en chemin relatif au
dossier où sont les fichiers css et js.

Si je charge les deux fichiers css et js à partir d'une page
"mon_site/test/essais_images.php", tout se passe bien et les images sont
correctement chargées tant par le css que par le js.

Si je charge les deux fichiers css et js à partir d'une page située à un
niveau d'arborescence supérieur, par exemple à partir de
"mon_site/vilgenis/80-83/ma_page.php", seules les images css sont bien
chargées alors que les images js ne le sont pas.

Quel que soit le niveau d'arborescence de la page, le chemin des images
css est bien vu en relatif par rapport à l'endroit où se trouve ledit
fichier css.
Ce n'est pas le cas pour les images des fichiers js dont le chemin est
vu par rapport à l'endroit où se trouve la page appelante ; j'en veux
pour preuve que si je modifie le fichier js comme suit :

function LightboxOptions() {
this.fileLoadingImage = '../../../images/loading.gif';
this.fileCloseImage = '../../../images/close.png';

les images du fichier js sont alors bien chargées à partir de
"mon_site/vilgenis/80-83/ma_page.php".

Existe-t-il une méthode pour dire à Javascript que le chemin des images
est relatif à la position du fichier contenant le script et non pas
relatif au chemin de la page appelante.
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis

7 réponses

Avatar
Fred
Le 23/05/2012 16:33, Dominique Ottello a écrit :

Existe-t-il une méthode pour dire à Javascript que le chemin des images
est relatif à la position du fichier contenant le script et non pas
relatif au chemin de la page appelante.



Bonjour,

Je ne pense pas que ce soit prévu dans JavaScript.

Dans ton cas, s'il n'y a qu'un dossier image, js et css, et des pages
pouvant être dans plusieurs niveau de dossiers, je pense qu'il vaut
mieux utiliser des chemins absolus.
Les pages seront déplaçables ou copiables sans avoir à se demander si
c'est le bon chemin relatif.

Fred
Avatar
Dominique Ottello
Fred écrivait :

Dans ton cas, s'il n'y a qu'un dossier image, js et css, et des pages
pouvant être dans plusieurs niveau de dossiers, je pense qu'il vaut
mieux utiliser des chemins absolus.
Les pages seront déplaçables ou copiables sans avoir à se demander si
c'est le bon chemin relatif.


Pour moi, c'est une très mauvaise solution, car il va encore falloir
trouver une combine pour modifier les chemins absolu entre le
développement en local et le transfert sur site réel.

Y'a pas l'équivalent Javascript de $_SERVER['DOCUMENT_ROOT'] en php ?

Ce qui permettrait de coder :

function LightboxOptions() {
this.fileLoadingImage=$_SERVER['DOCUMENT_ROOT'].'/images/loading.gif';
this.fileCloseImage= $_SERVER['DOCUMENT_ROOT'].'/images/close.png';
Avatar
Dominique Ottello
Dominique Ottello écrivait :

Y'a pas l'équivalent Javascript de $_SERVER['DOCUMENT_ROOT'] en php ?



J'ai trouvé un remplacement possible :

Ajout d'une variable :

var root = location.protocol + '//' + location.host;

Puis adjonction de cette variable dans les chemins :

function LightboxOptions() {
this.fileLoadingImage = root + '/images/loading.gif';
this.fileCloseImage = root + '/images/close.png';

Pour le moment, essayé seulement en local, mais ça devrait fonctionner
aussi sur le site réel.
--
Un « manuel » est un « intellectuel » qui sait se servir de ses mains.
Avatar
Fred
Le 23/05/2012 18:17, Dominique Ottello a écrit :

Pour moi, c'est une très mauvaise solution, car il va encore falloir
trouver une combine pour modifier les chemins absolu entre le
développement en local et le transfert sur site réel.



Pas sur. Il faut donner le chemin vu du client http:
'/images/loading.gif' doit suffire à condition qu'en local, 'images',
soit au même emplacement (toujours vu du client http).


var root = location.protocol + '//' + location.host;

Puis adjonction de cette variable dans les chemins :

function LightboxOptions() {
this.fileLoadingImage = root + '/images/loading.gif';
this.fileCloseImage = root + '/images/close.png';



ce n'est pas nécessaire, l'url du serveur est pris par défaut
Avatar
SAM
Le 23/05/12 16:33, Dominique Ottello a écrit :
Bonjour,

Je suis confronté à un problème de chemin de fichier images dans les
fichiers js, problème qui n'existe pas dans les fichiers css.

Soit :
- mon_site/images/ dossier contenant les images
référencées dans les fichiers ci-dessous
- mon_site/css/lightbox.css (Fichier css)
- mon_site/js/lightbox.js (Fichier javascript)

Dans lightbox.css, on a, par exemple :

.lb-prev:hover {
background: url(../images/prev.png) left 48% no-repeat;
}

Dans lightbox.js, on a, par exemple :

function LightboxOptions() {
this.fileLoadingImage = '../images/loading.gif';
this.fileCloseImage = '../images/close.png';

Dans les deux cas, les chemins des images sont bien en chemin relatif au
dossier où sont les fichiers css et js.




non

enfin ... oui c'est bien le cas mais ...

il n'y a que les fichiers de CSS qui en tiennent compte
(les images y ont leur chemin relativement à l'emplacement du fichier de
css)

en JS le relatif sera par rapport à la page html où est inséré le fichier JS
donc ... en JS, passer par le relatif par rapport à la racine du site
("/" ou "./")
this.fileLoadingImage = '/images/loading.gif';
ou, au pire, en absolu
this.fileLoadingImage = 'http://monSite/images/loading.gif';

--
Stéphane Moriaux avec/with iMac-intel
Avatar
SAM
Le 23/05/12 18:17, Dominique Ottello a écrit :
Fred écrivait :

Dans ton cas, s'il n'y a qu'un dossier image, js et css, et des pages
pouvant être dans plusieurs niveau de dossiers, je pense qu'il vaut
mieux utiliser des chemins absolus.
Les pages seront déplaçables ou copiables sans avoir à se demander si
c'est le bon chemin relatif.


Pour moi, c'est une très mauvaise solution, car il va encore falloir
trouver une combine pour modifier les chemins absolu entre le
développement en local et le transfert sur site réel.

Y'a pas l'équivalent Javascript de $_SERVER['DOCUMENT_ROOT'] en php ?



ben ... si ... y a le bête html !!!!

à force de jongler avec le php on en oublie ses bases ?

le "root" est y : / (slash tout seul)

(comme sous Linux par exemple)

chemin relatif à la racine :
image dans dossier 'images" à la racine du site :
<img src="/images/vue_1.htm" alt="">

chemin relatif à la "page" :
image dans dossier 'images' au niveau supérieur (dossier voisin quoi) :
<img src="../images/vue_1.htm" alt="">

--
Stéphane Moriaux avec/with iMac-intel
Avatar
Dominique Ottello
SAM écrivait :

à force de jongler avec le php on en oublie ses bases ?

le "root" est y : / (slash tout seul)



Exactement ce que je me suis dit hier à 19h 15, peu après la réponse de
Fred. J'ai même ajouté « Quel imbécile - c'est pas le mot exact qui fut
employé - je fais ! »
En fin de compte, c'est la comparaison avec les fichiers css qui m'a
fait oublier les « bases / ./ et ../ ».
Je vais ajouté résolu dans le sujet, je ne sais pas ce que ça va donner
pour le fil.
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis