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

Php 网站的模板文件和文件结构,php,html,Php,Html,我有一些模板文件(我相信这就是它们的名称),例如:head.php(这里我将所有信息保存在中)、nav-menu.php和footer.php。我使用php require_一次性将它们插入需要插入的任何位置 当我创建包含文件的子文件夹时,问题就出现了。比如myDomain.com/blog/blog-post1.php。然后,如果我想使用模板,我需要使用../head.php,但这并不能解决问题,因为head.php中的代码没有正确执行,因为所有指向CSS的链接(例如)也需要“./”。我已经求

我有一些模板文件(我相信这就是它们的名称),例如:head.php(这里我将所有信息保存在
中)、nav-menu.php和footer.php。我使用php require_一次性将它们插入需要插入的任何位置

当我创建包含文件的子文件夹时,问题就出现了。比如myDomain.com/blog/blog-post1.php。然后,如果我想使用模板,我需要使用../head.php,但这并不能解决问题,因为head.php中的代码没有正确执行,因为所有指向CSS的链接(例如)也需要“./”。我已经求助于创建标题的另一个副本,我知道这是低效的。有没有更好的办法来处理这个问题


我在这里寻找答案,但似乎没有什么是我遇到的确切问题。我希望有人能帮忙。谢谢。

在您的include文件中,始终使用调用它的文件的完整路径(需要写入的文件) 所以不是

require_once('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链接,您可以始终在路径的开头使用
/
,这意味着源始终相对于站点url的根

因此,与此相反:

<link type="text/css" rel="stylesheet" href="css/main/app.css" />

使用以下命令:

<link type="text/css" rel="stylesheet" href="/css/main/app.css" />

这意味着该文件位于
而这项来自四面八方的工作

引用了文档根目录中的公共链接和资源。i、 e.以前面的斜杠开始

想象一下,head.html和nav.html被包括在内

head.html

<head>
    <link href="/static/css/example.css" rel="stylesheet" type="text/css" />
</head>
然后,在任何Php文件中,您都可以轻松引用您的包含:

include 'head.html';
include 'nav.html';
// other stuff

您需要在样式表中使用绝对路径,包括。为了避免PHP问题,您可以使用
dirname(_文件)'/head.PHP'
谢谢您的回答。这似乎是解决这个问题的一个很好的办法。现在,问题不同了。当我使用require_一次(DIR.'/../nav_menu.php');它可以工作,但在nav_菜单中我有几个链接,例如index.php。如果我放置require_的文件是这样的:mySite.com/blog/post1.php,那么它会在blog文件夹中查找index.php,而不是mySite.com/index.phpIf如果使用我的规则,则不会发生这种情况-或者可能我没有理解您-您应该始终使用完整路径包含您的php-这意味着使用当前位置的DIR。然后从每一个地方,你将调用此文件,它仍然会再次工作,谢谢。我可以让它在服务器上工作,但不能在本地工作。你介意向我解释一下我如何设置WAMP来使用这种配置吗。。。我让它工作了。我只需要在WAMP上创建一个虚拟主机。非常感谢。你能再详细一点吗?这仍然令人困惑。我已经在html示例中放置了路径。
<nav>
    <a href="/foo/bar">Bar</a>
    <a href="/foo/baz">Baz</a>
    <a href="/foo/bat">Bat</a>
</nav>
php_value include_path ".:/path/to/includes"
include 'head.html';
include 'nav.html';
// other stuff