用于css / js的Php自动加载器仅适用于一页

时间:2016-06-18 18:58:43

标签: php html css

我正在尝试使用glob函数自动加载所有css / js文件。这目前正在运行,但仅限于一页。如果我尝试在另一个页面上调用该函数,它确实包含它们,但如果我在浏览器中检查它们,则文件似乎是空的。 我几乎不知道在哪里寻找以及出了什么问题。

css加载功能:

public function loadCss(){
    $folder = glob('/public/assets/css/*.{css}', GLOB_BRACE);
    foreach ($folder as $filename) {
        echo "<link rel='stylesheet' href='$filename'>\n";
    }
}

的index.php:

   require_once './app/core/autoload.php';
$al = new autoload();
$al->addDirectories(
    array(
        'app/core',
        'app/mvc',
        'app/router',
        'app/lib',
        'app/models',
    ));
$al->register();

try{
    $mvc  = new mvc\mvc();
    $mvc->start();
    echo $mvc->getView();

}catch(Exception $e){
    echo '<B>Error message:</B> '.$e->getMessage();
}
?>

<head>
    <?php
        $bs = new \bootstrap\bootstrap();
        $bs->loadCss();
        $bs->loadJS();
    ?>
</head>

如果有更好的方法,我想知道它:P

2 个答案:

答案 0 :(得分:0)

glob函数返回没有路径的文件名。如果您的CSS文件存储在/assets/css相对于文档根目录(例如http://localhost/assets/css/main.css),那么只有当页面也位于同一目录中时,您的链接标记才会起作用(例如http://localhost/assets/css/test.php

尝试将绝对路径添加到href元素的link属性。

答案 1 :(得分:0)

这是我加载css和js文件的方式,唯一的要求是它们需要与php文件具有相同的名称。例如,my_script.php必须具有css / my_script.css和/或js / my_script.js

$script = $_SERVER['PHP_SELF']; // current script
$script = explode('/', $script); // convert url to array
$script = end($script); // grab the last element

$css = str_replace('php', 'css', $script);
$js = str_replace('php', 'js', $script);

if (file_exists("css/$css")) {
    echo "<link rel='stylesheet' type='text/css' href='css/$css'>";
}
if (file_exists("js/$js")) {
    echo "<script src='js/$js'></script>";
}