7696 sujets

Développement web côté serveur, CMS

Bonjour,

Je me sers des "includes" pour inclure les portions de pages communes à toutes les pages (balises, entête, menu...). Voilà en gros l'arborescence-type de mon site :

www
...../styles
...../images
...../dossier1
..........index.php
..........page1.php
..........page2.php
.....index.php
.....page1.php
.....page2.php
...

Dans les pages de la racine, j'inclus mes fichiers comme ça :
<?php include('includes/02-styles.php'); ?>


Dans les pages du dossier1 par exemple, j'inclus mes fichiers comme ça :
<?php include('../includes/02-styles.php'); ?>


Ca marche pour tout les fichiers sauf pour ma feuille de style et les images... Je comprend très bien d'où vient le problème mais ne sais pas trop comment y remédier...

Actuellement je me contente de copier le dossier /styles et /images dans mes sous-répertoires... pas fameux !

Avec des url absolues en distant, je n'aurais pas ce problème évidemment. Seulement je voudrais que mes fichiers locaux (j'utilise Wamp) et distants soient les mêmes, tout en évitant le base href... que je maîtrise pas du tout !!!

Alors j'ai vu des posts similaires bien sûr mais pas tout compris...
Si vous avez l'astuce je suis preneuse !

Sandra
Modifié par ASGlobalServices (23 May 2009 - 18:30)
salut

perso, j'utilise ceci


function ecrire_css($nom_css, $media_css) {
    	echo '<link rel="stylesheet" rev="stylesheet" type="text/css" href="'.$nom_css.'" media="'.$media_css.'" />'.chr(10);
}

ecrire_css('../styles/styles.css','screen');
ecrire_css('../../styles/styles.css','screen');


pour les images js ou autres, idem. çà permet de s'affranchir des niveaux de répertoires.

include == include_once Smiley cligne
Modérateur
Salut,

l'élément BASE est pourtant fait pour ça. Smiley cligne

Un petit exemple :
<?php
$NomServeur = $_SERVER['SERVER_NAME'] ; 
$local=((substr($NomServeur,0,7)=="192.168") || ($NomServeur=="localhost") || ($NomServeur=="127.0.0.1"));
$baseref = ($local) ? "http://localhost/example/" : "http://www.example.com/";
?>
<base href="<?php echo $baseref; ?>" />

Modifié par Heyoan (18 May 2009 - 17:09)
Pour faire simple, la grosse différence entre les includes PHP et les autres objets (feuilles CSS, images, scripts) c'est que PHP raisonne à partir de la page affichée, alors que les autres raisonnent à partir de leurs positions dans l'arborescence.

Donc, pour une page PHP de niveau 1 contenant script/include.php et script/feuille.css on a :

Fichier include.php
<img src="images/mon image.jpg" />

Fichier feuille.css
#mondiv { background: white url(../images/monimage2.jpg); }

CSS est obligé(e) de remonter au niveau 1 (../) puis de redescendre (rep images), alors que PHP, partant de ce niveau 1, n'a pas besoin de remonter.
Ceci vient du fait que où que soit placé le fichier inclus, il est appelé par la page initiale : ses appels se font donc depuis là.

La solution est soit de s'affranchir du système de répertoire, soit de tenir compte de cette logique.
Bonjour et merci de vos réponses !

@ Arsene : Oui c'est exactement ce que j'avais compris mais... tu l'expliques mieux que moi Smiley smile !

@ Heyoan : Il n'y a pas de problèmes au niveau référencement et Google avec l'utilisation de base href ? Parce qu'en fait je n'ai rien du tout contre base href (que je trouve bien pratique d'ailleurs) mais j'ai vu plusieurs posts qui traitaient d'un éventuel problème avec Google...
Je vais essayer ta solution en local déjà...

@ Keran : heu... pas tout compris Smiley confused

Merci,

Sandra
Modérateur
ASGlobalServices a écrit :
@ Heyoan : Il n'y a pas de problèmes au niveau référencement et Google avec l'utilisation de base href ? Parce qu'en fait je n'ai rien du tout contre base href (que je trouve bien pratique d'ailleurs) mais j'ai vu plusieurs posts qui traitaient d'un éventuel problème avec Google...
Ben je ne vois pas pourquoi il y en aurait... Smiley murf
Bonjour !

Heyoan j'ai essayé de mettre ta solution en place sur mon site mais ça ne marche pas Smiley sweatdrop ... Elle m'intéresse beaucoup, tu pourrais m'aider à la mettre en place correctement ?

Quant au problème de Google avec la balise "base href", après vérifications, il se situe uniquement au niveau de la mise en cache par Google, parce qu'il place lui-même une balise "base href" qui écrase donc la nôtre...
Voir le post relatif sur WRI : http://forum.webrankinfo.com/balise-base-href-cache-t18170.html
Suffit de lui interdire la mise en cache des pages...

Merci de votre aide !

Sandra
Modifié par ASGlobalServices (22 May 2009 - 15:16)
Modérateur
ASGlobalServices a écrit :
Heyoan j'ai essayé de mettre ta solution en place sur mon site mais ça ne marche pas
Tu as bien mis l'élément BASE dans le HEAD ? Tu aurais une page en ligne ?

ASGlobalServices a écrit :
Quant au problème de Google avec la balise "base href", après vérifications, il se situe uniquement au niveau de la mise en cache par Google, parce qu'il place lui-même une balise "base href" qui écrase donc la nôtre...
Le sujet date de 2004 : pas sûr que ce soit toujours vrai... et en plus ça ne me semble pas très important puisqu'il ne s'agit que de l'affichage du cache de Google...
Bonjour Heyoan,

Le site : h*tp://www.pegase-13.fr (site en construction)
Les pages concernées par "base href" sont celles de "Pôle Gestion", le reste étant en construction...

Pour l'instant j'ai donc mis un simple <base href="h*ttp://www.pegase-13.fr" /> mais j'aurais préféré la solution de ton exemple qui m'aurait permis de passer sans souci de la version locale à la version distante...

Ton exemple :

<?php

$NomServeur = $_SERVER['SERVER_NAME'] ; 

$local=((substr($NomServeur,0,7)=="192.168") || ($NomServeur=="localhost") || ($NomServeur=="127.0.0.1"));

$baseref = ($local) ? "http://localhost/example/" : "http://www.example.com/";

?>

<base href="<?php echo $baseref; ?>" />


Merci !

Sandra
Modérateur
ASGlobalServices a écrit :
j'aurais préféré la solution de ton exemple qui m'aurait permis de passer sans souci de la version locale à la version distante...
Il faut adapter à ton URL en local. De quel logiciel te sers-tu ? Wamp, EasyPHP, autre ?
Euh, excusez-moi, mais pourquoi ne pas tout bêtement n'utiliser que des chemins absolus, à partir de la racine du site ???

Moi je fais comme ça :

* Dans les fichiers php :


<?php include($_SERVER['DOCUMENT_ROOT']."/include/menu_data.php"); ?>


* Dans les CSS :


background: #FFF url("/style/images/menu.jpg") top left repeat-x;


Ca marche très bien, que ce soit en local (WAMP) ou en distant (OVH)...
Modifié par mistike (22 May 2009 - 19:37)
Bonjour Mistike !

Oui, malgré mon niveau "débutante en php", j'ai pensé à ta solution mais je n'ai pas réussi non plus à la mettre en place :

En local (Wamp), mes fichiers ne sont pas directement sous "www" mais dans un dossier correspondant au site (plusieurs sites, soit "site1", "site2"...)

En distant (OVH aussi), mes fichiers ne sont pas tous non plus sous "www"...

Et bien entendu, les noms de dossiers des sites ne sont pas les mêmes Smiley ohwell ...

Sandra
Modérateur
Salut,

mistike a écrit :
Euh, excusez-moi, mais pourquoi ne pas tout bêtement n'utiliser que des chemins absolus, à partir de la racine du site ???
C'est effectivement une solution... sauf si, comme moi, tu as placé plusieurs répertoires (1 par site) dans ton répertoire "racine" de Wamp auquel cas $_SERVER['DOCUMENT_ROOT'] ne suffit pas puisqu'il me renvoie en local D:/Mes Sites alors qu'il me faudrait D:/Mes Sites/Site1 ou D:/Mes Sites/Site2.

Cette solution pose également problème pour les sous domaines : en local il s'agit d'un répertoire à la racine du site D:/Mes Sites/Site1/administration alors qu'en ligne il s'agit de administration.example.com
Modérateur
ASGlobalServices a écrit :
J'utilise Wamp Smiley langue
Eh bien mon exemple devrait fonctionner : il suffit de remplacer http://localhost/example/ par ce qui apparaît dans l'url lorsque tu testes ton site...
Heyoan a écrit :
C'est effectivement une solution... sauf si, comme moi, tu as placé plusieurs répertoires (1 par site) dans ton répertoire "racine" de Wamp auquel cas $_SERVER['DOCUMENT_ROOT'] ne suffit pas puisqu'il me renvoie en local D:/Mes Sites alors qu'il me faudrait D:/Mes Sites/Site1 ou D:/Mes Sites/Site2.


OK. Chez moi ça fonctionne car sous WAMP j'ai configuré chaque site en Virtual Host. Et en distant chacun est effectivement dans la racine (www).
Modifié par mistike (23 May 2009 - 13:45)
Heyoan a écrit :
Eh bien mon exemple devrait fonctionner : il suffit de remplacer http://localhost/example/ par ce qui apparaît dans l'url lorsque tu testes ton site...


Oui !! Exact ça marche maintenant !! Je crois que j'ai oublié le "/" à la fin de l'url lors de mon premier essai Smiley confused Smiley confus

Merci beaucoup à tous, c'est génial !

Sandra