PHP arborescence site et include menu [Fermé]

Signaler
-
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
-
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

10 réponses

Messages postés
249
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
+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.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 82015 internautes nous ont dit merci ce mois-ci

Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
99
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 ???


Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014
1 159
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
> Ricky38
Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014

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...
> Florence
CA Y EST ! CA MARCHE ! :-)))

Je poste pour éviter de te faire perdre du temps avec d'autres explications et je reviens expliquer
> Florence
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 ;-)
niahoo
Messages postés
249
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19 > Florence
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.
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12
@niahoo : j'aime bien tes extensions XD

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?
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 :-)
burnedsyn
Messages postés
170
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
21 février 2009
14
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

J'ai trouvé un code qui répond au problème ici: http://www.phpdebutant.org/article68.php
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
Ricky38
Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014
1 159
Salut,

voici deux sites où tu vas trouver ton information :)
http://www.php-astux.info/chemins-relatif-absolu.php
http://wiki.mediabox.fr/tutoriaux/html/chemins_absolus_et_relatifs

Bonne journée
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
Ricky38
Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014
1 159
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
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
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12
j'ai trouvé !!!!!!!!!!!!
après quelques semaines de galères...
nativement php me donnait la solution !
eh oui, hébergé en http://utilisateur.hebergeur.com
ou monsite.com, cette astuce marche à coup sûr !

$url='http://'.getenv("HTTP_HOST").'/le/chemin/url/tonfichier.php'; // lien url exact !
même si le répertoire web est /var/truc/httpdocs/ ça marche !
echo $url.'<br/>'."\n"; // pour être sûr(e) que ça fonctionne.
echo '<a href="'.$url.'"'.'>mon lien vers je ne sais quoi</a>'; //ton lien html est là !
tu peux utiliser $url dans ton include, puisque cette fonction attend en paramètre le chemin, comme ceci:
<?php include($url); ?>
Messages postés
556
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
30 mars 2010
47
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"
?>


niahoo
Messages postés
249
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
non la tu fais l'inverse de ce qu'elle veut