5160 sujets

Le Bar du forum

Holla holla population ! Smiley smile

Mon titre envoie du lourd je trouve, mais après pour expliquer sa va être un peu plus épineux. J'vais faire de mon mieux. Smiley biggol

Alors actuellement mon site est un site de stats pour un jeu qui se met a jours toutes les heures blablabla. Bref en gros sa sert a suivre son évolution sur le jeux via stats/graph etc. J'dis sa pour les noms de dossier que vous soyez pas surpris Smiley biggol .

En gros a la racine il y a : index.php ; header.php ; menu.php ; footer.php ; images ; FR (dossier concernant la communauté française).

Le soucis c'est que j'ai décomposer une page en plusieurs partie (normal hein, rien de révolutionnaire) avec header.php, menu.php, footer.php. En gros sur chaque page j'inclue c'est élément via include('footer.php') par exemple. Tout sa dans l'optique que si je dois modifier un élément dans le header je n'aurais pas besoin de le faire sur toutes les pages !!

Le soucis qui me force a venir quémander votre aide aujourd'hui c'est que dans footer.php on retrouve par exemple ceci :

<h3>Nous suivre :</h3>
<a href="#"><img src="images/facebook.png"/></a>


Un icone FB pour nous suivre, "liker" pour être exact Smiley cligne .

Donc pour la page index.php sa marchera comme sur des roulettes.

Mais pour par exemple une autre page telle que indexFR.php qui se trouvera dans le dossier FR, on inclut aussi le footer via include('../footer.php') normal le footer se trouve un "cran" plus haut. On trouvera le même code:

<h3>Nous suivre :</h3>
<a href="#"><img src="images/facebook.png"/></a>


Mais c'est là que sa vas coincer ! On devrais trouver ici <img src="../images/facebook.png"/>.
Vu que le dossier image se trouve un cran plus haut !

Je donne l'exemple un peu banal mais c'est pour ne pas trop galéré a expliquer Smiley lol .

J'voudrais savoir comment éviter ce problème. Pour pas me taper la solution un peu bourrin de devoir modifier le footer dans chaque page une par une etc. Une ou deux page sa irais, mais là on parle de dizaine de pages, si ce n'est plus. Dans X communauté....

QUE FAIIIIIIIIIIIIIIIIIRE ????? Smiley bawling

En plus, c'est *** car a mon avis la solution est toute bête, mais moi et mon coéquipier, on débute, c'est notre premier "gros" site. Donc on as besoin de conseil là....

Mille merci d'avances !
Administrateur
Bonjour,

il y a des fonctions PHP pour savoir dans quel répertoire se trouve la page en train d'être interprétée par PHP. Connaissant le répertoire courant et sa position par rapport à la racine (qui n'est pas "/" mais par ex. "/var/truc/www/", chemin que tu auras ajouté manuellement dans un fichier de config pour faire plus simple), tu peux ensuite calculer une variable du genre $path_to_something et préfixer les noms de fichier de tes ressources avec cette variable. C'est très résumé Smiley rolleyes
bonjour,

en principe/theorie :
<a href="#"><img src="images/facebook.png"/></a>

pointe sur le dossier enfant a partir de l'url de ta page.
:
<a href="#"><img src="../images/facebook.png"/></a>

pointe sur le dossier parent a partir de l'url de ta page pour redescendre dans le dossier "images" facebook.png se trouve dans un dossier adjacent a celui ou se trouve ta page.

:
<a href="#"><img src="/images/facebook.png"/></a>

pointe sur le dossier enfant à partir de la racine du site. Sans être une url absolue, on en est plus très loin.

Cordialement, GC
Le plus bateau comme le dit jmlapam est de mettre les adresses absolues. Pour éviter les ennuis si un jour tu changes d’url, tu peux même définir une constante $RACINE = "http:…"; et utiliser partout dans ton code php sans te soucier de l’emplacement
$RACINE . 'images/facebook.png'

Modifié par adrien881 (22 Dec 2011 - 12:59)
Salut,

Une autre solution existe : utiliser des chemins relatifs par rapport à la page actuelle (ou à une autre URL servant de référence), en recourant à l'élément HTML base.

Pour ma part, ma préférence va pour l'indication des chemins à partir de la racine du site.
Modifié par Victor BRITO (22 Dec 2011 - 14:55)
Felipe a écrit :
Bonjour,

il y a des fonctions PHP pour savoir dans quel répertoire se trouve la page en train d'être interprétée par PHP. Connaissant le répertoire courant et sa position par rapport à la racine (qui n'est pas &quot;/&quot; mais par ex. &quot;/var/truc/www/&quot;, chemin que tu auras ajouté manuellement dans un fichier de config pour faire plus simple), tu peux ensuite calculer une variable du genre $path_to_something et préfixer les noms de fichier de tes ressources avec cette variable. C'est très résumé Smiley rolleyes


Euh... ça : "/var/truc/www/", c'est le chemin sur le filesystem. Mais la question porte sur l'URL.

adrien881 a écrit :
Le plus bateau comme le dit jmlapam est de mettre les adresses absolues. Pour éviter les ennuis si un jour tu changes d’url, tu peux même définir une constante $RACINE = &quot;http:…&quot;; et utiliser partout dans ton code php sans te soucier de l’emplacement
$RACINE . 'images/facebook.png'


Une constante ça se défini pas comme ça mais à l'aide du mot-clé define et y'a pas le signe $ devant. Ton exemple montre comment définir une variable.

Bref, si on utilise une structure simple (sans sous-domaine) et avec comme seul point d'entrée le fichier index.php, on peut ajouter simplement :


define('SITE_URL', str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']));


Après il suffit de faire des liens comme ça :


<img src="<?=SITE_URL; ?>images/truc.jpg" />

ou

<a href="<?=SITE_URL; ?>dossier/sous-dossier/page.html">

Modifié par jb_gfx (22 Dec 2011 - 20:10)
Sur le fond me semble quand même de redefinir le lien vers le dossier a partir du dossier racine avec un simple : / est le plus simple et rapide a mettre en oeuvre, surtout s'il ne s'agit que d'un fichier.

J'ai souvent vu la balise base renseigner de cette façon
<base href="/"  />
avec le defaut ou l'avantage que tout les fichiers appeler en lien relatif le son a partir de la racine (c'est a dire tout les fichiers de style, js, image, documents divers, etc ...)
Plus communement , on rencontre :
<a href="/" title="accueil du site">Accueil</a>

et ça fonctionne bien Smiley smile
cordialement
Et quand tu passes d'un sous-dossier à la racine et inversement ou que tu rajoutes une langue au site avec une URL sous la forme d'un dossier, tu fais comment ? Tu refais tout (exemple numéro 1) ou tu édites tous les chemins de tous les fichiers templates (exemple numéro 2).
heu ? pour l'icone facebook on s'en tape , non ?

<edit>Les exemple sont a titre de rappel pour ceux qui justement ne maitrise pas bien ou on oublié ces bases.</edit>
Modifié par gc-nomade (22 Dec 2011 - 22:54)
Holla holla, je suis super content d'avoir eu autant de réponse. Je m'attendais pas a créer ce mini débat Smiley biggol .

On pense opté pour la solution des liens absolu qui semble plus facile a mettre en place. Cela ne pose pas de soucis ? Quels sont les inconvénient de cette technique ? Si jamais on bouge des dossier il faudra reprendre tout les liens ?

Sinon comment tester sa en local vu qu'on a pas d'url?

EDIT : J'ai pris l'exemple de l'icone FB car c'étais simple a comprendre. Mais on appel aussi plusieurs fois des scripts de connexions, d'autre scripts ou code php. Voila voila ^^
Modifié par azledev (23 Dec 2011 - 10:51)
Salut,

C'est rapide et facile à faire c'est pour cela que je l'ai évoqué, l'ennui est que si tu changes d'url bah faut tout changer... de même que si un dossier est changé de place ou renommé (exemple: le dossier images) bah faudra tout changer également.

>> Avec ce genre de méthodes, modifier l'arborescence devient vite pénible.
Cela peut dépanner sur un petit site maintenant s'il s'agit d'un projet important, il devient presque ingérable de procéder ainsi. Faut pas que l'envie de faire du tri dans tes images ou tes scripts te prenne, du style -> je mets telle sorte d'images dans un sous-dossier ou tiens j'ai pas mal de scripts, je vais les mettre dans un dossier js.

En fait, il faut y penser dès le départ et les choses seront fixées dans le marbre, c'est pas souple du tout. Les méthodes suggérées précédemment par rapport à la racine semblent mieux indiquées.


>> Tester en local ne changera pas grand chose puisque tu vas changer des chemins relatifs en chemins absolus avec cette opération donc si tu conserves la même arborescence en local et sur le server (ce qui est souhaitable pour ton organisation) aucun changement.
Modifié par jmlapam (25 Dec 2011 - 20:24)
a écrit :
On pense opté pour la solution des liens absolu qui semble plus facile a mettre en place. Cela ne pose pas de soucis ? Quels sont les inconvénient de cette technique ? Si jamais on bouge des dossier il faudra reprendre tout les liens ?

Sinon comment tester sa en local vu qu'on a pas d'url?


Bonjour,

Dans ce cas , ce que t'explique jb_gfx est la solution a prendre.

Tu peut alors declarer plusieurs constante et construire et modifier tes url selon tes besoins (la soluce de jb_gfx):
# a l'initialisation de tes scripts.

$images ='/images/';
#  .... reste du code du site 
define('SITE_URL', str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']));
define('DOC_IMAGES',$images);

tu reconstruit ton url comme ceci :
<img src="<?=SITE_URL . DOC_IMAGES ; ?>truc.jpg" />


idem pour tes autres document , script ou styles, include() , ...

Si tu modifie ton arborescence en deplaçant tes fichiers vers un autre dossier , il te suffit de ne modifier qu'une variable.

Si teste ton script sur un serveur local a la racine de celui-ci , il se comportera comme sur un serveur en ligne.

GC, cordialement
Modifié par gc-nomade (26 Dec 2011 - 14:48)