如何在不丢失所有路径的情况下从文件夹中调用 master.php 文件?

How can I call a master.php file from inside a folder without losing all the paths?

我正在制作一个只有 php 的网站。为了使页眉和页脚易于更新,我制作了一个 master.php 文件,内容如下:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1, user-scalable=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../images/a-master-favicon.ico" alt="a-master-favicon" >

    <title>Testing site</title>

    <link href="assets/css/sticky-footer-navbar.css" rel="stylesheet"/>
    <link rel="stylesheet" href="assets/css/head_footer.css" />
  </head>

  <body>

    <?php $signed_request = $_POST['signed_request']; ?>
    <?php if(empty($signed_request)): ?>
        <?php include('header.php'); ?>
    <?php else: ?>
        <div id="eatSpace" style="margin-bottom: -175px;"></div>
    <?php endif; ?>

    <?php include($content); ?>

    <?php if(empty($signed_request)): ?>
        <?php include('footer.php'); ?>
    <?php endif; ?>


    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="js/jquery.easing.1.3.js"></script>
    <script src="js/jquery.animate-enhanced.min.js"></script>
  </body>
</html>

首先 $signed_request 部分是这样我可以在通过 Facebook 加载某些内容时显示它,这不是问题所在。

问题是我的文件夹结构如下:

root
|
|--assets
|    |
|    |--css
|    |--js
|
|--faqs
|    |
|    |--faqs-content.php
|    |--index.php
|
|
|--footer.php
|--header.php
|--index-content.php
|--index.php
|--master.php

所以,当我调用 index.php 时,它看起来像这样:

<?php

$content = 'index-content.php';
    include('master.php');

这又会调用 master.php 并加载整个站点。

但是,如果我尝试在另一个目录(即 faqs/)中执行相同的操作并在那里调用 index.php,那么代码看起来会略有不同:

<?php

$content = 'faqs-content.php';
    include('../master.php');

除了没有 css 或 js 加载之外,这一切都很好,因为主文件中的路径位于不同的目录中。我该如何克服这个问题?

这是我第一次做这样的事情,所以我不确定我所做的是否是最好的方法。

如果您的网站很简单,您可以结合使用相对和绝对 link。您的资源必须使用绝对值 link,例如 <link href="/assets/css/sticky-footer-navbar.css" rel="stylesheet"/>,而 PHP links 可以像您描述的那样是相对值。

但是,它不能很好地扩展到更复杂的应用程序,并且很快就会变得难以管理。现代 PHP 框架使用 PHP autoloading.

如果你不喜欢重新发明轮子,学习一个像Laravel or Yii这样好的框架。这些负责自动加载等等。