Posez votre question Signaler

PHP arborescence site et include menu

Florence - Dernière réponse le 26 mars 2012 à 15:48
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
Lire la suite 

PHP arborescence site et include menu »

22 réponses
Réponse
+3
moins plus
+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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ???


Ajouter un commentaire
Réponse
+0
moins plus
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
FlorenceFlorence - 10 févr. 2009 à 17:49
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- 10 févr. 2009 à 18:32
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- 26 mars 2012 à 15:48
@niahoo : j'aime bien tes extensions XD
Ajouter un commentaire
Réponse
+0
moins plus
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?
Florence - 21 févr. 2009 à 09:22
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- 21 févr. 2009 à 11:55
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
Ajouter un commentaire
Réponse
+0
moins plus
J'ai trouvé un code qui répond au problème ici: http://www.phpdebutant.org/article68.php
Ajouter un commentaire
Réponse
+0
moins plus
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- 15 sept. 2009 à 13:59
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
Ajouter un commentaire
Réponse
+0
moins plus
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- 15 sept. 2009 à 14:56
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
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- 10 févr. 2009 à 12:37
non la tu fais l'inverse de ce qu'elle veut
Ajouter un commentaire
Ce document intitulé « PHP arborescence site et include menu » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?