Bonjour !
Sur mon site, j'utilise la fonction include de PHP pour le header, le menu, le footer et aussi les meta génériques, et pour le moment, toutes les pages se situaient à la racine du site.

Cependant, je souhaite désormais créer un dossier pour un peu plus de structure (en l’occurrence un dossier Histoire pour le site d'une commune), mais de manière logique, tous les liens relatifs se trouvant dans les fichiers inclus (liens vers page, CSS...) sont brisés quand on se trouve dans ce dossier.

J'ai essayé de rajouter un "/" devant les liens, mais ça ne semble pas fonctionner. Quel technique puis-je employer pour gérer "dynamiquement" les liens relatifs selon l'emplacement du dossier ?

Merci.
Modérateur
bonjour,

le php est généré en premier lieu. Du coup si tu appelles "mapage.php" dans laquelle il y a des includes php, peu importent où se situent ces fichiers inclus, tous les liens vers des css/images/js relatifs se feront à partir de l'emplacement de mapage.php

Cependant si dans header.php tu as une balise d'inclusion de css, et que "mapage.php" et "histoire/macommune.php" incluent header.php, il n'est plus possible d'utiliser un lien relatif dans header.php sauf si: toutes les pages php sont dans un même sous niveau de dossier: tu peux alors utiliser "../css/print.css" par exemple. (les deux points remontent d'un niveau). Ou sinon utiliser des liens absolus à la racine du site en commençant par "/" qui indiquera le dossier dans lequel on arrive avec le nom de domaine.
Bonsoir !
Désolé pour la réaction tardive, je me suis enfin penché sur la question.

J'ai presque trouvé la solution, presque, car ce n'est pas encore optimale :
<base href="/" />

En plaçant ce code dans le head des pages se trouvant dans un dossier, il n'y a plus aucun problème que ce soit pour les liens du menu ou les appels CSS/JS.

Mais il reste deux soucis :
* Pour faire un lien vers un fichier du même dossier, il faut remettre le nom du dossier; normal, vu qu'on part de la racine...
* Les liens vers une ancre sont logiquement faussés (en l’occurrence, un "Retour en haut" dans le footer et commun à toutes les pages).

Peut-être en appliquant :
xml:base="xxx"
à certain élément (menu, head) mais ça ne fait surement que déplacer le problème...

Vous avez une suggestion ?
kustolovic a écrit :
bonjour,

le php est généré en premier lieu. Du coup si tu appelles &quot;mapage.php&quot; dans laquelle il y a des includes php, peu importent où se situent ces fichiers inclus, tous les liens vers des css/images/js relatifs se feront à partir de l'emplacement de mapage.php

Cependant si dans header.php tu as une balise d'inclusion de css, et que &quot;mapage.php&quot; et &quot;histoire/macommune.php&quot; incluent header.php, il n'est plus possible d'utiliser un lien relatif dans header.php sauf si: toutes les pages php sont dans un même sous niveau de dossier: tu peux alors utiliser &quot;../css/print.css&quot; par exemple. (les deux points remontent d'un niveau). Ou sinon utiliser des liens absolus à la racine du site en commençant par &quot;/&quot; qui indiquera le dossier dans lequel on arrive avec le nom de domaine.


Oups, les liens absolus depuis la racine marchent bien, c'est juste que j'avais omis que ma racine en local était /www et / tout court... Smiley confused
Une constante en PHP pour la racine fera l'affaire pour tous ces liens "fixes".

Merci.