网站的模板文件和文件结构

时间:2016-02-04 16:34:42

标签: php html

我有一些模板文件(我相信这就是所谓的),例如:head.php(这里我保留了<head>内的所有信息),nav-menu.php和页脚。 PHP。我使用php require_once将它们插入到我需要的任何地方。

当我创建一个包含文件的子文件夹时,我的问题出现了。让我们说myDomain.com/blog/blog-post1.php。然后,如果我想使用我需要使用的模板../head.php,但它没有解决问题,因为head.php中的代码没有正确执行,因为所有到CSS的链接例如也需要“../”。我已经使用了创建标题的另一个副本,我知道它是低效的。有没有更好的方法来解决这个问题?

我在这里寻找答案,但似乎没有什么是我遇到的确切问题。我希望有人可以提供帮助。感谢。

2 个答案:

答案 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