CSS / JS的PHP自动加载器仅在一页上工作



我正在尝试自动加载所有具有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 mvcmvc();
    $mvc->start();
    echo $mvc->getView();
}catch(Exception $e){
    echo '<B>Error message:</B> '.$e->getMessage();
}
?>
<head>
    <?php
        $bs = new bootstrapbootstrap();
        $bs->loadCss();
        $bs->loadJS();
    ?>
</head>

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

glob函数返回没有路径的文件名。如果您的CSS文件相对于文档root(例如http://localhost/assets/css/main.css)存储在/assets/css中,则您的链接标签仅在页面也在同一目录中(例如http://localhost/assets/css/test.php)时才能工作。

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

这就是我加载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>";
}

最新更新