我有一些模板文件(我相信这就是所谓的),例如:head.php(这里我保留了<head>
内的所有信息),nav-menu.php和页脚。 PHP。我使用php require_once将它们插入到我需要的任何地方。
当我创建一个包含文件的子文件夹时,我的问题出现了。让我们说myDomain.com/blog/blog-post1.php。然后,如果我想使用我需要使用的模板../head.php,但它没有解决问题,因为head.php中的代码没有正确执行,因为所有到CSS的链接例如也需要“../”。我已经使用了创建标题的另一个副本,我知道它是低效的。有没有更好的方法来解决这个问题?
我在这里寻找答案,但似乎没有什么是我遇到的确切问题。我希望有人可以提供帮助。感谢。
答案 0 :(得分:0)
在您的包含文件中,始终使用调用它的文件的完整路径(写入require的文件) 所以而不是
require_once('nav-menu.php');
使用
require_once(__DIR__ . '/nav-menu.php');
此示例表示nav-menu.php与定义需要的文件位于同一位置。如果相对使用相对:
require_once(__DIR__ . '/../nav-menu.php'); //nav-menu.php located one folder up from the calling file
这样它就可以从您调用文件的任何路径开始工作。
关于你的css和js链接,你总是可以在路径的开头使用/
,这意味着源始终相对于网站网址的根目录。
所以不要这样:
<link type="text/css" rel="stylesheet" href="css/main/app.css" />
使用它:
<link type="text/css" rel="stylesheet" href="/css/main/app.css" />
表示此文件位于http://yourdomain/css/main/app.css 这项工作来自世界各地
答案 1 :(得分:0)
引用文档根目录中的公共链接和资源。即用前面的斜线开始它们。
想象一下head.html和nav.html是包含的。
head.html
<head>
<link href="/static/css/example.css" rel="stylesheet" type="text/css" />
</head>
nav.html
<nav>
<a href="/foo/bar">Bar</a>
<a href="/foo/baz">Baz</a>
<a href="/foo/bat">Bat</a>
</nav>
如果您使用的是example.com/foo或example.com/foo/bat,则所有链接仍然有效,因为它们是绝对的。
你可能放弃相对链接的一些灵活性,但你会有更少的麻烦。
如果您使用apache作为使用mod php的Web服务器。您可以为环境设置包含路径。
在.htaccess
php_value include_path ".:/path/to/includes"
然后在您的任何Php文件中,您可以轻松引用您的包含:
include 'head.html';
include 'nav.html';
// other stuff