我想根据用户的登录状态生成CSS文件。我对PHP会话没有任何问题,我只是很难动态生成CSS而且我不喜欢我的解决方案,即使它有效。
(我希望根据用户的登录状态向用户提供完全不同的CSS文件。)
而不只是指向正确的CSS文件,在文件夹中有各种CSS文件,只需更改指针,例如:
<link rel='stylesheet' type='text/css' href='<?php echo $correctStylePath; ?>'>
我认为实际上允许根据其登录状态访问文件非常简洁。 (我想阻止访问他们无法看到的CSS文件。)
这意味着根本不允许错误的CSS进入公共视图。
我无法找到根据会话呈现不同文件的方法,所以我做了这个看起来相当粗糙的黑客。
我只是将所有CSS加载到HTML文档的头部,而不是提供不同的CSS文件或具有不同内容的相同CSS。
有没有更好的方法可以让我将CSS保存在自己的文件中?
的index.php
<?php
// Now we can check for user
if(isset($_SESSION['LoggedIn']) && isset($_SESSION['Username'])){
$includeMode = "LoggedIn";
?>
<html>
<head>
<title>Home (Logged In)</title>
<?php
require_once 'styles.css.php';
?>
</head>
<body>
....
</body>
</html>
<?php
}else{
$includeMode = "LoggedOut";
}
?>
<html>
<head>
<title>Home (Logged Out)</title>
<?php
require_once 'styles.css.php';
?>
</head>
<body>
....
</body>
</html>
styles.css.php
<?php
$fileLocation = '';
if($includeMode == 'LoggedIn'){
$fileLocation = '../css/styles-logged-in.css';
}else if($includeMode == 'LoggedOut'){
$fileLocation = '../css/styles-logged-out.css';
}else{
die();
}
$stylesFile = fopen($fileLocation, 'r') or die("Unable to open file!");
print "<style>";
print fread($stylesFile, filesize($fileLocation));
print "</style>";
fclose($stylesFile);
?>
答案 0 :(得分:1)
您可以创建名为style.php
的PHP页面,将标题设置为CSS,然后根据$_SESSION
变量输出,然后更改.htaccess
文件。
例如,在主页的<head>
:
<link rel='stylesheet' type='text/css' href='style.css'>
在 style.php
:
session_start();
header("Content-type: text/css");
if(isset($_SESSION['LoggedIn']) && isset($_SESSION['Username'])){ ?>
/* Put your CSS for logged-in users here */
<?php } else { ?>
/* Other CSS here */
<?php } ?>
然后,在根目录中的 .htaccess
中:
RewriteEngine on
RewriteBase /
RewriteRule ^style\.css$ style.php [L]
这意味着如果您访问/style.css
,您会看到/style.php
的输出,这将是相关的样式表。
有一点需要注意的是,浏览器缓存会出现问题,因为它会缓存一个样式表或其他,因此除非浏览器缓存关闭,否则样式将不一致(但这会减慢你的速度)位点)。
答案 1 :(得分:1)
PHP是一种动态语言,因此请将其作为一种语言使用。你不必为每个if else语句创建html标签。根据您的条件语句,使PHP填补空白。
CSS文件不是由必需的函数调用,而是使用HTML **<link>**
标记包含,并在该标记中调用php所需的CSS文件。
<?php
// Now we can check for user
if(isset($_SESSION['LoggedIn']) && isset($_SESSION['Username'])){
$includeMode = "LoggedIn";
$cssFileName = 'LoggedIn.css';
}else{
$includeMode = "LoggedOut";
$cssFileName = 'LoggedOut.css';
}
<html>
<head>
<title>Home (<?php echo $includeMode; ?>)</title>
<link rel="stylesheet" type="text/css" href="style/main.css">
// below link tag will overrule the above one if same element style has been defined in both files
<link rel="stylesheet" type="text/css" href="style/<?php echo $cssFileName; ?>">
</head>
<body>
....
</body>
</html>