正在从数据库中加载 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 一样。您的代码更有条理,也更耗时。