在目录中使用模板中的include函数

时间:2014-12-22 11:33:20

标签: php relationship

我希望使用位于名为/ template的文件夹中的标题(包括css,js和图像)和页脚文件。然后,这些文件将包含在目录中的每个文件中,例如:

/template/header.php + footer.php
/home/index.php
/products/products.php
/products/hardware/types/hardware.php
/css
/js
/images

当我使用时:

include (__DIR__ . "/../template/header.php");

包含该文件(虽然我需要更改每个文件和广告更多&#34; /../"我走的目录越远)但所有css,js和图像都被破坏了。< / p>

这是我的标题(位于header.php中,其中一个包含的文件):

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="icon" type="image/gif" href="images/favicon.ico">
<link rel="stylesheet" type="text/css" href="../css/layout.css"/>
<link rel="stylesheet" type="text/css" href="../css/slider.css"/>
<link rel='stylesheet' type='text/css' href='../css/menus.css'/>
<link rel='stylesheet' type='text/css' href='../css/forms.css'/>
<link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="all"/>
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/jquery.elastic.source.js"></script>
<script type="text/javascript" src="../js/control.js"></script>

<title>APEC Energy - <?php echo($PageTitle);?> </title>
</head>

我现在正在尝试使用配置文件(很难开始工作但仍然不适合我)。

config.php(放在根文件夹中):

<?php

$paths = array(
    "root" => "./",
        "controller"    => "controller",              
        "stylesheets"   => "css",
        "images"        => array(...),
        "javascript"    => array(...),

);

$projectName = "/";
function fInc($filePath){
    global $projectName;
    return '//'.$_SERVER['HTTP_HOST'].'/'.$projectName.'/'.$filePath;
}

?>

并在每个.php文件中使用:

调用包含文件im
<?php
$rootDir = $_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1]);
require_once($paths['helper']['html']."template/header.php");
?>

当我使用var_dump($ paths)时,它打印出&#34; NULL&#34;

但现在只是一个空白的屏幕?

1 个答案:

答案 0 :(得分:0)

在标题中,您的所有网址都是相对的。对我来说,即使输出文件始终位于同一文件夹中,当将其包含在不同文件夹中的PHP文件中时,这通常会导致意外行为。为了避免相对URL的问题,我总是使用绝对URL,无论我正在引用什么或我在做什么。

要获取项目的根URL,我使用以下代码:

rtrim('http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'], substr(strrchr($_SERVER['PHP_SELF'], '/'), 1))

设置文件看起来像这样:

<?php
namespace Mynamespace;

class Settings
{

    /**
     * Main settings for the system.
     *
     * All system-wide non-specific settings goes here.
     *
     * @param string $setting Name of the setting you want to return.
     * @return string Returns the specified setting value or, if this fails, false.
     */
    public static function main($requested)
    {
        $settings = array(
            'base_url' => rtrim('http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'], substr(strrchr($_SERVER['PHP_SELF'], '/'), 1)),
            'site_title' => 'My Awesome Site',
            'debug_on' => true,
            'some_other_setting' => 'some value',
        );
    }
}

要使用设置,我会包含该文件并使用静态调用来获取我的设置。像这样:

Settings::main('base_url')

结果是提供给浏览器的脚本的根文件夹。我始终确保在我的根文件夹中使用index.php作为单个入口点,因此我始终确保代码返回根文件夹。从那里开始,只需添加资源所需的任何路径即可。