从数据库加载css值

时间:2015-05-06 11:20:13

标签: php html css cookies yii

目前我正在使用Yii Framework处理网站CMS,用户可以在其中编辑网站中使用的主要背景颜色。当我加载页面时,我需要从数据库中查询CSS值(背景颜色),将结果放到Cookies中,然后在我的CSS文件中使用这些值。

要在CSS文件中使用PHP变量和Cookie,我将CSS文件从main.css重命名为main.php,并在顶部添加:header("Content-type: text/css; charset: UTF-8");

问题是,当我第一次打开页面时,我没有加载从数据库中获取的颜色。我使用inspect元素并检查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 个答案:

答案 0 :(得分:2)

根据你所说的,有两个概率

<强> 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;
}

确保没有任何不好(如加载CSS)发生在find。如果是覆盖。

<强> 2。您的css已缓存

为了让您的css动态加载到您加载main.php的位置(可能是您的布局),您应该添加如下内容:

<link rel="stylesheet" type="text/css" 
href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.php?q=<?php echo microtime(1);?>">

通过这种方式,您可以确保动态加载css。但是这种方式就像内联<style>一样。您的代码更有条理,更耗时。