2010-11-05 6 views
2

Je veux inclure un menu dans mes pages php. Comme ceci:Comment gérer les liens inclus en PHP?

dans index.php

require_once 'includes/menu.php'; 

en dir/index.php

require_once 'includes/menu.php'; 

dans menu.php Je:

<a href='link1.php'>Link 1</a> 
<a href='link2.php'>Link 2</a> 
<a href='link3.php'>Link 3</a> 

Le problème est que la chemin doit être différent pour le sous-répertoire et la racine. Comment puis-je gérer cela, de sorte que la sortie est link1.php pour l'index, et ../link1.php pour les sous-répertoires?

J'ai trouvé ce lien, mais la question est pas très clair, donc je ne pas connaître si est lié:Change relative link paths for included content in PHP

Répondre

6

est ici une pensée: utiliser des chemins absolus. Mettre le href comme /link1.php sera lié à http://www.yourdomain.com/link1.php, quel que soit le sous-répertoire dans lequel vous vous trouvez.

Puisque je ne connais pas les détails de votre situation, cependant, cela pourrait ne pas être une solution acceptable. Juste le mettre là-bas.

Si votre menu est utilisé dans différents sous-répertoires pour faire référence à des emplacements différents, par exemple, par exemple. utilisé à /foo/sub/index.php pour se référer à /foo/link1.php et également utilisé au /bar/sub/index.php pour se référer à /bar/link1.php, alors le HTML base tag pourrait être utile.

+0

Voici comment j'ai toujours résolu ce problème: +1 –

+0

@Matchu: Un choix logique, une autre idée? – Edgar

+0

@Edgar: une solution HTML est probablement beaucoup plus propre Je parie que si ce menu est réutilisé dans plusieurs sous-répertoires, menu incertain de ce que le chemin absolu serait, la balise HTML [base] (http://www.w3schools.com/tags/tag_base.asp) pourrait être utile. – Matchu

0

Je vous recommande de définir une URL de 'base' dans le cadre de la configuration de l'application et de préfixer les liens avec celle-ci.

(NB vous pouvez caclulate l'URL de base au moment de l'exécution - mais besoin logiques différentes pour les différentes parties de l'application - à moins que le répertoire « racine » de votre application est toujours constante, par exemple

function get_app_root($fromthis) 
{ 
    if (basename(fromthis)=='myapproot') { 
     return $fromthis; 
    } 
    if (dirname($fromthis)=='') { 
     return false; 
    } 
    return get_app_root(dirname($fromthis)); 
} 

$appbase=get_app_root(__FILE__); 
if ($appbase===false) { 
    die "Whoops!"; 
} 

(serait besoin de quelques réglages pour gérer les URL plutôt que les chemins)

+0

Une réponse claire quand les chemins absolus ne le feront pas :) +1 – Matchu

+0

Je suis confus par l'exemple de code, cependant. Pourriez-vous inclure un exemple de son utilisation? On dirait qu'il retourne à un nom de répertoire connu. Si l'on connaît la racine de l'application, pourquoi la calculer? Il semble qu'il suffirait de définir '/ mysubdir /' en tant que racine de l'application et de le préfixer à toutes les URL. – Matchu

+0

Man, vous avez gâté toute votre réponse. À quoi sert ce code moche? –