Rechercher : dans
Par :

PHP arborescence site et include menu

Dernière réponse le 15 sep 2009 à 15:18:37 Florence, le 10 fév 2009 à 11:48:08 
 Signaler ce message aux modérateurs

Bonjour à tous,

Il y a 2 ans je me suis autoformée au langage HTML/CSS et bien que je sois loin d'en exploiter toutes les capacités, j'en perçois les limites quand il me faut, entre autres, changer le moindre mot dans le menu principal d'un site = obligée de corriger toutes mes pages une par une :-(

J'ai donc décidé de mettre au PHP pour pouvoir bénéficier, entre autres de la fameuse fonction "include".

Ma première question est la suivante : est ce qu'il est possible d'utiliser l'arborescence/architecture que l'on souhaite pour construire son site ? pour ma part j'aimerais utiliser celle ci dessous afin de conserver une certaine séparation/organisation entre les différents thèmes qui constitueraient mon nouveau site

DossierRacine

index.php
menu.php

DossierTheme1
page.php
page.php
....

DossierTheme2
page.php
page.php
....

DossierTheme3
page.php
page.php
....




Ma seconde question est la suivante : est ce qu'avec une architecture comme celle ci je peux utiliser ma page "menu.php" (grace à la fonction "include") dans toutes les autre pages de mon site ? si oui quels liens suis je censée mettre dans ma page "menu.php" pour qu'ils fonctionnent aussi bien dans ma page "index.php" que dans n'importe quelle autre "page.php", une fois inclu ?

Mon menu se présenterait horizontalement et donnerait ceci dans un navigateur :

Accueil Theme1 Theme2 Theme 3 etc


J'ai déjà fait plusieurs essais et plus que cherché sur le net mais je ne trouve pas (ou ne comprends pas ?!) comment les liens de ma page "menu.php" pourraient me conduire aussi bien sur une "page.php" de mon Theme1 (ou Theme2, etc) et ensuite me ramener sur ma page "index.php". D'où mes deux questions...

Merci d'avance aux personnes qui voudront bien éclairer ma lanterne ! ;-)

Florence

Configuration: Windows XP
Firefox 3.0.5

1

974_Vin's_974, le 10 fév 2009 à 11:55:31

En faite, tu as une menu ??? et pour pa répéter le code dans chaque page, tu souhaite, le mettre dans une page menu.php, et a chak fois sur les page dont tu en a besoin tu fais un include ("menu.php") c ca ???


Dséolé puor l'otrhogarphe, arpès tuot on s'enfuo, t'es bein capbale de cmoprnedre ça non ??
[' Tu tr0uveras t0uj0urs plus f0rt que t0i ']

Répondre à 974_Vin's_974

2

Psyk974, le 10 fév 2009 à 11:56:56

Salut,

Tout a fait possible.

Ta page principale sera l'index.php
Pourquoi tu n'intègres pas le menu directement dans cette page sans passer par un include ;)

Pour tes autres pages rien de plus simples pour les appeler.

tu peux par exemple faire :

<?php
    include('DossierTheme1/page.php'); // pour appeler une page dans ton dossier "DossierTheme1"
?>


Psyk

Répondre à Psyk974

4

niahoo, le 10 fév 2009 à 12:37:21

Non la tu fais l'inverse de ce qu'elle veut

Répondre à niahoo

3

Ricky38, le 10 fév 2009 à 12:29:20

Bonjour,

Oui tu peux très bien prendre l'arborescence que tu désires.

Pour ce qui est des liens que tu dois mettrent dans ta page menu et bien je te dirais de mettre le lien complet comme http://www.monsite.com/index.php au lieu de ../index.php. De cette façon tu peux utiliser l'arborescence que tu veux.

Pour ce qui est de tes includes et bien tu vas devoir te servir de /menu.php pour qu'il sache que ton fichier menu est à la racine de ton site. Comme ceci:

Sur ta page index et toutes tes pages a la racine du site :

<?PHP
include('menu.php');
?>

tu peux aussi mettre le lien complet pour accéder a ton fichier menu.

Sur tes autres pages dans tes différents thèmes:
<?PHP
include('../menu.php');
?>


pour ce qui est de tes liens de ta page menu et bien là encore tu peux utiliser les liens complets ou bien encore faire comme ceci:

pour l'index ton lien serait ../index.php

pour les autres pages ce serait ../theme1/page1.php ../theme1/page2.php etc

../theme2/page1.php
../theme3/page1.php

les liens complets restent encore moins compliqués

Répondre à Ricky38

6

Florence, le 10 fév 2009 à 15:06:56

Tout d'abord merci à tous pour vos réponses :-)

Ricky38 et Niahoo, vos réponses vont tout à fait dans le sens de ce que je souhaiterais faire. (j'avais présenté mon arborescence avec des décalages qui n'ont pas été pris en charge, mais l'idée de base est donc bien d'avoir ma page "index.php" et ma page "menu.php" à la racine du dossier qui contiendra mon site, puis d'avoir un sous dossier par théme, sous dossiers (DossierTheme1, etc) dans lesquelles j'aurai mes autres "pages.php"

Ce que tu me conseilles Ricky, il me semble l'avoir appliqué à la lettre mais sans succès. En HTML les notions de liens sont bien claires dans mon esprit (du moins je crois ;-) même si je n'utilise quasiment que des liens relatifs. En tout cas je n'ai jamais eu de problème en ce sens.


Pour ce qui est du code "include", je l'ai bien mis dés le départ tel que tu le conseilles :

- dans la page index.php

<?PHP
include('menu.php');
?>


- dans les autres pages.php

<?PHP
include('../menu.php');
?>


Par contre, il y a une chose qui m'échappe totalement, c'est lorsque tu écris ceci :

-------------------------------------------

pour ce qui est de tes liens de ta page menu et bien là encore tu peux utiliser les liens complets ou bien encore faire comme ceci:

pour l'index ton lien serait ../index.php

pour les autres pages ce serait ../theme1/page1.php ../theme1/page2.php etc

../theme2/page1.php
../theme3/page1.php

---------------------------------------------


Si je prends un exemple concret en me basant sur l'arborescence que je souhaite mettre en place : supposons que sur ma page "menu.php" j'ai 2 liens : l'un pour accéder à ma page d'accueil (index.php), l'autre pour accéder à la premiere page de mon Theme1 (T1page1.php) :

Si j'inclus ma page "menu.php" dans ma page "index.php", le chemin des 2 liens sur la page "menu.php" seront :

<a href="index.php">Accueil</a>
<a href="Theme1/page1.php">Premiere page du theme1</a>


Mais si j'inclus aussi cette même page "menu.php" dans ma page "page1.php", le chemin des 2 liens sur la page "menu.php" devront devenir :

<a href="../index.php">Accueil</a>
<a href="page1.php">Premiere page du theme1</a>


C'est cela que je ne comprends pas :-( comment une même page "menu.php" peut avoir des liens qui fonctionnent pour toutes les pages de mon sites, du moment où toutes mes pages ne sont pas au même niveau dans l'arborescence...

De toute évidence il y a quelque chose qui m'échappe ?! peut être n'ai je pas encore suffisamment de connaissances PHP pour comprendre clairement la façon d'utiliser la fonction "include" et du coup je passe à coté d'une évidence en ayant un raisonnement basé sur le HTML.

Aussi, si tu as le temps, pourrais tu à partir de mon exemple basique, me donner une réponse concrète, s'il te plait ? :-)

Répondre à Florence

7

Ricky38, le 10 fév 2009 à 15:18:10

Salut,

la meilleure manière de ne pas te casser la tête est de mettre des liens complets dans ta page menu.php

soit:

<a href="http://www.tondomaine/index.php">Accueil</a>
<a href="http://www.tondomaine/theme1/page1.php">Premiere page du theme1</a> 


voilà alors tu pourras être a n'importe quel niveau et tu n'auras pas de problème
;)

Répondre à Ricky38

8

Ricky38, le 10 fév 2009 à 15:45:49

Florence,

si jamais tu as encore du mal à comprendre et bien inscrit toi et envoie moi un message privé et je pourrai regarder les fichiers que tu as actuellement pour bien les coder.

Répondre à Ricky38

9

Florence, le 10 fév 2009 à 17:05:25

Merci ! c'est vraiment sympa :-)

Avant de poster dans le forum, le fait de mettre un chemin absolu m'était apparu comme la "logique" à suivre mais cela n'a jamais fonctionné ! j'en déduis donc que je n'ai pas su donner le BON chemin ! Je suis même sûre de ne pas savoir exactement lequel inscrire dans mes liens, car je travaille pour l'heure en local. J'abuse donc pour poser l'ultime (j'espère !) question :

quel chemin précis dois je indiquer ? sachant que mon répertoire de données personnelles se situe sur un disque "virtuel" E (où se situent donc tous les fichiers de mon futur site) et que tout ce qui est lié au fonctionnement du pc se trouve classiquement sous le célèbre "C"........ sur lequel se situe donc également mon serveur (wamp) me permettant de travailler hors ligne

j'avais essayé ça, entre autres tentatives de chemin complet "hors ligne", à inscrire dans mes liens :


<a href="http://localhost/DossierRacine/index.php">Accueil</a>

<a href="E:\DossierRacine/index.php">Accueil</a>

<a href="file:///E|/DossierRacine/index.php">Accueil</a>

<a href="file:///C|/wamp/www/DossierRacine/index.php">Accueil</a>


La bonne question que j'aurais du poser tout de suite finalement, c'est quoi mettre avant DossierRacine ? puisqu'après je sais quel chemin indiquer selon le fichier que je souhaite atteindre


J'avoue qu'en HTML les chemins (relatifs ou absolus) ne me posaient aucun problème. Mais en PHP avec l'introduction d'un serveur virtuel sur mon pc, je n'ai plus aucune certitude sur le chemin absolu à indiquer en travaillant en local...

Répondre à Florence

10

Florence, le 10 fév 2009 à 17:15:40

CA Y EST ! CA MARCHE ! :-)))

Je poste pour éviter de te faire perdre du temps avec d'autres explications et je reviens expliquer

Répondre à Florence

11

Florence, le 10 fév 2009 à 17:49:43

Alors pour les explications, j'ai tout simplement mis ceci comme chemin :

<a href="/DossierRacine/index.php">Accueil</a>


Une "illumination" tardive, car j'étais quasi sûre d'avoir essayé ce chemin avant de poster dans le forum :-/ A priori ça marche parfaitement ! :-)))

Bon, et bien j'espère que maintenant je vais pouvoir continuer à avancer sur la construction de mon site et surtout l'apprentissage de PHP, car si pour l'heure je ne fais que toucher du bout des doigts tout l'intérêt de ce langage, je rêve déjà de tout ce qu'il me permettra de faire lorsque j'en maitriserai la bonne connaissance/utilisation ! :-)


Encore merci à toutes les personnes ayant pris la peine de répondre et plus particulièrement à toi Ricky :-) C'était la toute première fois que je postais pour un problème de conception de site et j'ai vraiment apprécié ta disponibilité et la clarté de tes réponses ! MERCI ! :-)


(si quelqu'un peut changer le statut du sujet comme étant résolu ;-)

Répondre à Florence

12

niahoo, le 10 fév 2009 à 18:32:04

Hum tu sais en php la fonction include c'est plutôt une aide pour organiser ses fichiers qu'une fin en soi, la finalement tu n'as géré que du html ^^ tous ces problemes de liens relatifs ou absolus, c'est du HTML. la fonction include sert juste à dire au serveur 'quand tu envoie la page index.php, à la ligne 12, tu copie-colle le contenu du fichier menu.php' que tu aurais pu tout aussi bien appeler menu ou menu.pouet ou encore menu.hihihi, menu.com, menu.osef, menu.miam, etc;.

pasque en te mettant à php tu va vite découvrir comment générer un menu dynamiquement en fonction de la page ou se trouve l'utilisateur, des dernieres pages visitées, de sa fréquence de visite, etc.

bonne chance pour la suite.

Répondre à niahoo

5

niahoo, le 10 fév 2009 à 12:43:52

+1

dans ton fichier menu.php met des liens complets, ainsi tu n'aura pas en en faire plusieurs versions, donc http://www.bblblbl.wom/qsdqsdqd/sdfsdf.php


par contre pour te s include, je répete ce qu'il dit en plsu précis.

si ton menu.php se trouve dans le dossier racine:

pour l'inclure depuis une page dans le dossier racine: include("menu.php");
pour l'inclure dans une page du dossier /abcd: include("../menu.php"); ou '..' signifie: remonter d'un dossier


mettons que dans domaine.com/abcd/1.php, tu veuille inclure un fichier domaine.com/yxz/A.phh, il te faut donc remonter d'un dossier, puis aller dans le dossier xyz pour trouver le fichier, donc ça ferait include("../xyz/a.php");

voilà le principe.

mais personellement je met toutes les pages de mon site à la racine, et pour différencier les thme je ferais comme ça:
t1_page.php
t1_page2.php
t2_page.php
t2_page2.php

par contre si dans ton menu tu n'utilises pas de fonctions de php mais juste du html, tu peux alors faire ça en javascript.

come ça dans tes pages tu inclus une page.js qui contient une fonction qui crée le menu, puis dans ta page a l'emplacement du menu tu fais <scritp language="javascript">taFonction();</script>. car comme ça tu peux appeler ta page.js avec son adresse complete (http://machin), et tu peux donc déplacer tes pages quand tu veux, sans avoir à retoucher les includes.

Répondre à niahoo

13

WildInTheWoods, le 19 fév 2009 à 11:11:53

Bonjour,
je souhaite de la même façon inclure un menu commun à toutes les pages d'un site.
Mais en lisant ce sujet je me pose la question suivante:
Pourquoi chercher à inclure le même menu à toutes les pages plutôt que de faire l'inverse?

N'est-ce pas plus simple d'inclure la bonne page à l'index contenant le menu en fonction du choix effectué sur ce même menu?

Répondre à WildInTheWoods

15

Florence, le 21 fév 2009 à 09:22:47

Bonjour Wild,

me concernant, la réponse à ta question est simple : étant donné que je commence tout juste à découvrir le PHP, j'attaque "doucement" ;-) afin d'être sûre de maitriser les bases.

Concernant la fonction "include", j'avais déjà mis "au chaud" le lien de "PHP débutant" que tu évoques dans ton second message, mais pour l'heure j'estime ne pas avoir une connaissance/maitrise suffisante des risques induits par cette méthode pour l'utiliser. Bref, je ne suis pas encore suffisamment à l'aise avec le langage PHP pour utiliser cette méthode. Ceci explique donc mon choix actuel.

Maintenant, même si elle semble plus simple, cette méthode est elle la mieux adaptée ou la plus recommandée ? je laisse aux spécialistes le soin de répondre :-)

Répondre à Florence

16

burnedsyn, le 21 fév 2009 à 11:55:05

Tout a fait c'est le plus simple
dans l'index tu inclu le menu
et les page qui sont liées par le menu sont aussi inclue par le fichier index
et tes url deviennent alors

<a href="./?targetpage=pouetpage">lien</a>

qui rappelle automatiquement l'index avec le parametre targetpage et tu inclu le targetpage queqlque part dans ton index

Répondre à burnedsyn

14

WildInTheWoods, le 19 fév 2009 à 12:18:57

J'ai trouvé un code qui répond au problème ici: http://www.phpdebutant.org/article68.php

Répondre à WildInTheWoods

17

Melora, le 15 sep 2009 à 10:24:24

Bonjour
J'utilise également la fonction include de php pour afficher un menu dans toutes les pages.
mon pb est que récemment j'ai ajoute tout un tas de pages qui sont dans différents niveau de sous dossiers
Ex :
dossier www racine contient
menu.php
index.php
<dossier 1>page1.php (avec include pour le menu ../menu.php)
<dossier2>page2.php (avec include pour le menu ../menu.php)
<dossier2a>page2a.php (avec include pour le menu ../../menu.php)
<dossier2b>page2b.php (avec include pour le menu ../../menu.php)
mais comme cela se diversifie sur plusieurs sous-niveaux, j'ai envie de remplacer les ../../ et ../../../ en indiquant simplement comme en html le dossier racine où se trouve le menu.php
Or quand je mets le / pour indiquer la racine : ex :
<?php
include "/menu.php";
?>
cela me renvoie une erreur car il ne trouve pas le fichier menu.php.
Je ne sais donc pas comment indiquer en php que c'est dans le dossier racine et je n'avais pas tellement envie d'utiliser le chemin http complet.
Y a t'il une syntaxe particulière pour cela ?
merci d'avance
Melora

Répondre à Melora

18

Ricky38, le 15 sep 2009 à 13:59:31
Répondre à Ricky38

19

Melora, le 15 sep 2009 à 14:47:23

Merci pour ta réponse.
En réalité je sais parfaitement la différence entre un chemin relatif et un chemin absolu.
Ma question portait très précisément sur la syntaxe en php d'un chemin absolu.

En html lorsque je veux indiquer dans un lien (par ex pour une photo) son chemin absolu, j'indique :
/img/photo.jpg
qui signifie par le / de début que mon dossier img se trouve à la racine du dossier de site en ligne.
Je ne suis pas obligée de passer par son url complète (qui serait dans cet exemple : http://www.monsite/img/photo.jpg)
Ainsi, si je change le nom du site mais que je conserve la structure, alors tous les chemins continuent de fonctionner.

Je voudrais faire la même chose dans mon "include"
A ce jour je suis obligée d'utiliser la méthode remonter (../../) pour redescendre dans le bon sous-dossier.
Cela n'est pas très commode quand l'arborescence se complexifie (il y a bcp de pages sur mon site, qui se sont ajoutées avec le temps et les exigences des personnes concernées, et qui n'ont pas été planifiées dans la structure d'origine)
Or je ne peux pas utiliser la même syntaxe de type /dossier/menu.php car apparemment php ne comprend pas le / de début comme étant la racine du site.
Je n'ai que la possibilité d'utiliser l'url complète, ce que j'aurais voulu évité (mais que j'ai appliqué pour le moment faute de mieux)

J'espère avoir été plus claire dans mon explication
Bonne journée également

Melora

Répondre à Melora

20

Ricky38, le 15 sep 2009 à 14:56:40

Salut,

et bien en PHP ça fonctionne de la même manière

tout dépends ou est ton dossier
ex : /dossier/menu.php

tu pourrais faire ../dossier/menu.php et ça fonctionnerait

Mais petite question, pourquoi ne pas mettre le chemin complet ?
Tu fonctionne en php alors tu pourrais même créer une variable

donc $menu = ton lien complet;
et dans ton include tu te sert de la variable $menu au lien du lien

Personnellement j'opterais pour le lien complet dans l'Include

Répondre à Ricky38

21

 Melora, le 15 sep 2009 à 15:18:37

Une variable ne changerait rien puisqu'il faudrait que je la crée dans chaque page du site où il y aurait l'include non ?
donc autant renseigner l'include en dur
pour info le site
www.leemoonho.com
si tu veux regarder la structure

j'ai effectivement opté pour la solution que tu préconises
mais j'avais auparavant testé de mettre dans l'include
<?php
include "/dossier/menu.php";
?>
mais cela ne fonctionnait pas, il me renvoie une erreur comme quoi il ne trouve pas le fichier menu.php
bah j'ai mis le chemin url complet tant pis ^^
merci bien

Répondre à Melora