我正在尝试自动加载所有具有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>";
}