I want to include a menu in my php pages. Like this:
in index.php
require_once 'includes/menu.php';
in dir/index.php
require_once 'includes/menu.php';
in menu.php I have:
<a href='link1.php'>Link 1</a>
<a href='link2.php'>Link 2</a>
<a href='link3.php'>Link 3</a>
The problem is that the path should be different for the subdirectory and the root. How I can handle this, so that the output is link1.php for the index, and ../link1.php for the sub directories?
I found this link, but the question is not very clear, so I don´t known if is related: Change relative link paths for included content in PHP
Here's one thought: use absolute paths. Putting the href as /link1.php
will link to http://www.yourdomain.com/link1.php
, regardless of what subdirectory one is in.
Since I don't know the particulars of your situation, however, that may not be an acceptable solution. Just putting it out there.
If your menu is used in different subdirectories to actually refer to different locations, however, e.g. used at /foo/sub/index.php
to refer to /foo/link1.php
and also used at /bar/sub/index.php
to refer to /bar/link1.php
, then the HTML base tag might come in handy.
I'd recommend defining a 'base' URL as part of the application config and prefixing any links with that.
(NB you can caclulate the base url at run time - but need different logic for different parts of the app - unless the 'root' directory of your app is always constant, e.g.
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!";
}
(would need a few tweaks to handle URLs rather than paths)