PHP arborescence site et include menu

Fermé
Florence - 10 févr. 2009 à 11:48
neo_selen Messages postés 153 Date d'inscription dimanche 11 juillet 2010 Statut Membre Dernière intervention 29 juin 2016 - 21 juin 2012 à 23:16
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
A voir également:

10 réponses

niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
10 févr. 2009 à 12:43
+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
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
10 févr. 2009 à 11:55
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 ???


0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
10 févr. 2009 à 12:29
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
0
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 ? :-)
0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458 > Florence
10 févr. 2009 à 15:18
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
;)
0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458 > Florence
10 févr. 2009 à 15:45
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.
0
Florence > Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013
10 févr. 2009 à 17:05
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...
0
Florence > Florence
10 févr. 2009 à 17:15
CA Y EST ! CA MARCHE ! :-)))

Je poste pour éviter de te faire perdre du temps avec d'autres explications et je reviens expliquer
0
WildInTheWoods
19 févr. 2009 à 11:11
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?
0
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 :-)
0
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WildInTheWoods
19 févr. 2009 à 12:18
J'ai trouvé un code qui répond au problème ici: http://www.phpdebutant.org/article68.php
0
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
0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
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
0
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
0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
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
0
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
0
neo_selen Messages postés 153 Date d'inscription dimanche 11 juillet 2010 Statut Membre Dernière intervention 29 juin 2016 15
21 juin 2012 à 23:16
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); ?>
0
Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010 51
10 févr. 2009 à 11: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"
?>


-1
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
10 févr. 2009 à 12:37
non la tu fais l'inverse de ce qu'elle veut
0