正在从数据库中加载 css 值
Loading css value from database
目前我正在使用 Yii 框架开发站点 CMS,用户可以在其中编辑站点中使用的主要背景颜色。当我加载页面时,我需要从数据库中查询 CSS 值(背景颜色),将结果放入 Cookies,然后在我的 CSS 文件中使用这些值。
为了在 CSS 文件中使用 PHP 变量和 Cookie,我将 CSS 文件从 main.css
重命名为 main.php
并添加:header("Content-type: text/css; charset: UTF-8");
在上面。
问题是,当我第一次打开页面时,我从数据库中获取的颜色没有加载。我使用 inspect element 并检查了 CSS 文件,背景颜色定义不存在。刷新一次页面后才出现
请告诉我我做错了什么?任何帮助表示赞赏。相关代码如下。
protected/components/Controller.php
中的查询和 Cookie 插入:
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
$prog = Programs::model()->find(array(
'condition'=>'id_program = :program',
'params'=>array(
':program'=>Yii::app()->params->programCode,
),
));
Yii::app()->request->cookies['color1'] = new CHttpCookie('color1', $prog->main_color1);
}
}
CSS 文件:
<?php
header("Content-type: text/css; charset: UTF-8");
$color1 = $_COOKIE['color1'];
?>
#header
{
background-color: <?php echo $color1; ?>;
}
根据你所说的,有两种可能性
1.您的 cookie 值是在您的 main.php 被请求后设置的
您应该在设置 cookie 后加载 css 文件,main.php
。
为此,您可以使用 Controller::beforeRender
。在你的 protected/components/Controller.php
你可以有这个
public function beforeRender($action)
{
$color = Yii::app()->request->cookies['color1'];
$prog = Programs::model()->find(array(
'condition'=>'id_program = :program',
'params'=>array(
':program'=>Yii::app()->params->programCode,
),
));
Yii::app()->request->cookies['color1'] = new CHttpCookie('color1', $prog->main_color1);
return true;
}
请确保 find
没有发生任何不良事件(例如加载 css)。覆盖的情况下。
2。您的 css 已被缓存
为了在您加载 main.php
的地方动态加载您的 css(可能是您的布局),您应该添加如下内容:
<link rel="stylesheet" type="text/css"
href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.php?q=<?php echo microtime(1);?>">
这样您就可以确保您的 css 是动态加载的。然而,这种方式就像内联 <style>
s 一样。您的代码更有条理,也更耗时。
目前我正在使用 Yii 框架开发站点 CMS,用户可以在其中编辑站点中使用的主要背景颜色。当我加载页面时,我需要从数据库中查询 CSS 值(背景颜色),将结果放入 Cookies,然后在我的 CSS 文件中使用这些值。
为了在 CSS 文件中使用 PHP 变量和 Cookie,我将 CSS 文件从 main.css
重命名为 main.php
并添加:header("Content-type: text/css; charset: UTF-8");
在上面。
问题是,当我第一次打开页面时,我从数据库中获取的颜色没有加载。我使用 inspect element 并检查了 CSS 文件,背景颜色定义不存在。刷新一次页面后才出现
请告诉我我做错了什么?任何帮助表示赞赏。相关代码如下。
protected/components/Controller.php
中的查询和 Cookie 插入:
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
$prog = Programs::model()->find(array(
'condition'=>'id_program = :program',
'params'=>array(
':program'=>Yii::app()->params->programCode,
),
));
Yii::app()->request->cookies['color1'] = new CHttpCookie('color1', $prog->main_color1);
}
}
CSS 文件:
<?php
header("Content-type: text/css; charset: UTF-8");
$color1 = $_COOKIE['color1'];
?>
#header
{
background-color: <?php echo $color1; ?>;
}
根据你所说的,有两种可能性
1.您的 cookie 值是在您的 main.php 被请求后设置的
您应该在设置 cookie 后加载 css 文件,main.php
。
为此,您可以使用 Controller::beforeRender
。在你的 protected/components/Controller.php
你可以有这个
public function beforeRender($action)
{
$color = Yii::app()->request->cookies['color1'];
$prog = Programs::model()->find(array(
'condition'=>'id_program = :program',
'params'=>array(
':program'=>Yii::app()->params->programCode,
),
));
Yii::app()->request->cookies['color1'] = new CHttpCookie('color1', $prog->main_color1);
return true;
}
请确保 find
没有发生任何不良事件(例如加载 css)。覆盖的情况下。
2。您的 css 已被缓存
为了在您加载 main.php
的地方动态加载您的 css(可能是您的布局),您应该添加如下内容:
<link rel="stylesheet" type="text/css"
href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.php?q=<?php echo microtime(1);?>">
这样您就可以确保您的 css 是动态加载的。然而,这种方式就像内联 <style>
s 一样。您的代码更有条理,也更耗时。