Aller au contenu

PHP : menu et chemin (include)


Régis

Sujets conseillés

Je ne suis toujours pas un PRO du PHP, mais grâce à vos conseils et de petits en petits pas, j'avance.

Je suis en cours de création d'un site et mes pages sont créées par l'intermédiaire d'includes.

Mais j'ai un souci avec le menu.

La structure du site est de ce type :

- racine (index) ;

- racine / répertoire 1 (page11, page12, etc...);

- racine / répertoire 2 (page21, page22, etc...);

Mon menu est composé de : index - page11 - page12 - page21 - page22

Mais bien sûr en fonction de la localisation de ma page, le chemin de ces liens est différent.

J'ai fait 3 menus différents dont j'intègre un des 3 en fonction de la localistion de ma page.

Aucun problème à ce niveau là.

Mais je me demandais, s'il n'y avait pas une façon plus "élégante", plus "pro" de faire cela.

Je pense en particulier à un seul menu dont une variable (?) (peut-être le chemin ../ ?) changerait en fonction de la page. Est-ce possible (euh... facilement pour un débutant) ? et si oui comment ?

Peut-être que vu mon niveau PHP actuel, il vaut mieux que je me contente de faire l'include d'un menu spécifique à chacun des répertoires comme je fais actuellement ?

J'espère que j'ai été clair...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

même si j'ai compris ton idée, il me faudrait voir tes menus différents pour savoir la meilleure solution à appliquer !

C'est vrai que ta solution est barbare et demande à être simplifiée, mais il faudrait que je voie tes différentes pages avec les différents menus ;)

Lien vers le commentaire
Partager sur d’autres sites

Même si j'ai compris ton idée, il me faudrait voir tes menus différents pour savoir la meilleure solution à appliquer !

Merci Sarc !

Voici mes 3 menus (j'ai simplifié par commodité) :

Menu 0 (pour la racine) :

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

<a href="repertoire_1/page11.php">Page11</a> -

<a href="repertoire_1/page12.php">Page12</a> -

<a href="repertoire_2/page21.php">Page21</a> -

<a href="repertoire_2/page22.php">Page22</a>

Menu 1 (pour Répertoire 1) :

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

<a href="page11.php">Page11</a> -

<a href="page12.php">Page12</a> -

<a href="../repertoire_2/page21.php">Page21</a> -

<a href="../repertoire_2/page22.php">Page22</a>

Menu 2 (pour Répertoire 2) :

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

<a href="../repertoire_1/page11.php">Page11</a> -

<a href="../repertoire_1/page12.php">Page12</a> -

<a href="page21.php">Page21</a> -

<a href="page22.php">Page22</a>

Voilà...

Lien vers le commentaire
Partager sur d’autres sites

Tu peux très bien imaginer une variable du style :

$dir_en_cours ="../";

que tu glisses dans tes configurations. Ainsi :

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

deviendrait :

<a href="<?=$dir_en_cours?>index.php">Accueil</a> -

etc..

Lien vers le commentaire
Partager sur d’autres sites

Salut Régis,

Tu peux simplement mettre un menu commun pour les répertoires 1 et 2:

Menu 1 (pour Répertoire 1 et 2) :

<a href="../index.php">Accueil</a> - 
<a href="../repertoire_1/page11.php">Page11</a> -
<a href="../repertoire_1/page12.php">Page12</a> -
<a href="../repertoire_2/page21.php">Page21</a> -
<a href="../repertoire_2/page22.php">Page22</a>

Ou si ton site se trouve à la racine, tu peux supprimer les .. pour avoir des liens absolus:

<a href="/index.php">Accueil</a> - 
<a href="/repertoire_1/page11.php">Page11</a> -
<a href="/repertoire_1/page12.php">Page12</a> -
<a href="/repertoire_2/page21.php">Page21</a> -
<a href="/repertoire_2/page22.php">Page22</a>

ou encore:

<a href="/index.php">Accueil</a> - 
<a href=$DOCUMENT_ROOT."/repertoire_1/page11.php">Page11</a> -
<a href=$DOCUMENT_ROOT."/repertoire_1/page12.php">Page12</a> -
<a href=$DOCUMENT_ROOT."/repertoire_2/page21.php">Page21</a> -
<a href=$DOCUMENT_ROOT."/repertoire_2/page22.php">Page22</a>

qui fonctionnerait pour le tout ;)

Lien vers le commentaire
Partager sur d’autres sites

Le problème de l'absolu est que le site n'est plus transposable dans un autre répertoire.

le principe général, c'est de ne faire qu'un seul fichier config.php, de le mettre à la racine, et de mettre tout ce genre de paramètres de configuration dedans.

Quand on fait un site, on a toujours l'impression d'avoir fait les bons choix. A l'usage, on s'apercoit qu'on déplace des répertoires, on en ajoutes, on en supprime, etc..

Si l'on fait quelque chose qui ne soit pas transposable dès le départ facilement, on se retrouve dans le cas où l'on passe énormément de temps à tout remettre en état, et on risque de se retrouver avec des url qui ne pointent sur rien.

Lien vers le commentaire
Partager sur d’autres sites

Ce qu'a dit Dan est amha la meilleure solution.... Maintenant, si tu veux un code HTML super allégé et que tu ne veux pas mettre l'url complète pour chaque lien (gagner qques octets, quoi !), je pense que tu peux mettre un code du genre :

include('menu.php?dossier=$dossier'); en mettant dans la variable dossier le dossier en cours... Comme ca, dans ton menu.php, tu mets :

if ($_GET['dossier']=='repertoire1') 
{
...
}
elseif ($_GET['dossier']=='repertoire2')
{
...
}
...

Je ne sais pas si c'est une bonne solution, mais on peut la voir comme cela... Il y a même peut-être moyen d'optimiser ton code php... :P

Lien vers le commentaire
Partager sur d’autres sites

Tu peux simplement mettre un menu commun pour les répertoires 1 et 2:

Menu 1 (pour Répertoire 1 et 2) :

<a href="../index.php">Accueil</a> - 
<a href="../repertoire_1/page11.php">Page11</a> -
<a href="../repertoire_1/page12.php">Page12</a> -
<a href="../repertoire_2/page21.php">Page21</a> -
<a href="../repertoire_2/page22.php">Page22</a>

Tu peux très bien imaginer une variable du style :

$dir_en_cours ="../";

que tu glisses dans tes configurations. Ainsi :

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

deviendrait :

<a href="<?=$dir_en_cours?>index.php">Accueil</a> - etc..

7 cigarettes et 3 Aspro, plus loin me revoilà. :hypocrite:

J'ai testé les différentes solutions et en fonction de ma "compréhesion", j'ai choisi un mélange entre les 2 solutions ci-dessus.

Et incroyable... ca marche :hourra:

Merci à tous...

Lien vers le commentaire
Partager sur d’autres sites

A mon avis :

define("DOMAINE",&quot;http://domaine.com");

define("REPERTOIRE","repertoire/");

puis

echo &quot;http://".DOMAINE."/".REPERTOIRE."";

C'est la meilleure solution, même si elle parait contraignante.

Elle permet de changer de domaine, de répertoire, etc.. sans problèmes. ;)

Lien vers le commentaire
Partager sur d’autres sites

En fait, je n'ai pas précisé, par efficace je parlais en terme de rapidité d'exécution. Dans le cas de http://xxxx... je suppose qu'il y a en plus la résolution du domaine qui est faite et qui coute contrairement à un chemin en absolu défini en local /u/xxx/www/.... ?

Qu'en penses-tu ?

Lien vers le commentaire
Partager sur d’autres sites

Adn,

La résolution du domaine est faite dès que tu arrives sur le site. Elle se trouve à ce moment dans le cache DNS de ta machine et il n'y a plus d'interrogation tant que le TTL n'est pas atteint. A part le cas de Google.com (et quelques autres très gros sites) qui a un TTL de 5 minutes pour permettre à son algorithme round-robin de fonctionner, celui-ci est très souvent de 86400, soit 24 heures.

Au pire, il est mis à 3600 (secondes) soit une heure.

J'opterais, sur un serveur bien configuré, pour l'utilisation systématique du $_SERVER['DOCUMENT_ROOT'], car cela te permet des changements de domaine faciles et sans risque.

Dan

Lien vers le commentaire
Partager sur d’autres sites

A mon avis :

define("DOMAINE",&quot;http://domaine.com");

define("REPERTOIRE","repertoire/");

puis

echo &quot;http://".DOMAINE."/".REPERTOIRE."";

C'est la meilleure solution, même si elle parait contraignante.

Elle permet de changer de domaine, de répertoire, etc.. sans problèmes. ;)

<{POST_SNAPBACK}>

ce qui nous donnerait : http://http://domaine.com/repertoire/

Tu es distrait Anonymus :P

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...