css文件中的动态内容

时间:2012-03-12 06:47:48

标签: php css zend-framework

我正在修改网络应用。它允许用户输入标签颜色,背景颜色和字体颜色的十六进制值。当用户输入值并单击“更新模板”时。我需要能够根据用户输入的十六进制值更新背景颜色,标签颜色和字体颜色。我将标签颜色,背景颜色和字体颜色以及其他模板信息存储在MySQL表中。我可以在控制视图的所有.phtml文件中执行以下操作:

$Idtemplate = $this->user->defaultTemplate;
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);
$Title_Shiprequest = $Thetemplate->descriptionShipRequestTitle;
$clabel = $Thetemplate->descriptionlabelColor;
$cbackground = $Thetemplate->descriptionBkgColor;
$cfont =$Thetemplate->descriptionFontColor;

$clabel$cbackground$cfont用于.phtml中的颜色样式。

问题是大约有34个.phtml个文件。如果我想这样做,我必须找到负责颜色的div类,并在那里进行相应的更改。对我来说,这听起来是一个非常低效和冗长的解决方案。

但是css文件中大约有4-5个类,其中定义并使用了所有颜色值。我在css文件中执行类似上面提到的代码更容易和有效(唯一的问题是它在css文件中不起作用)并且如下所述引用它们(我已将common.css重命名为{{ 1}}):

common.php

当我尝试包含代码以从数据库中获取颜色信息时,它会混乱所有格式,就像程序看不到我的.css文件一样。我的预感是,我不允许在css中的heredoc中实例化一个对象,即使我将其重命名为common.php。在这种情况下,什么是解决方案?

更新 好吧,我已经包括标题(“Content-type:text / css”);但我再次尝试以下方法以确保:

.panel1
{
    width:                      auto;
    height:                     22px;
    background-color:           <?= $cbackground ?>;
    padding:                    5px;    
}

不幸的是,这不起作用。我也尝试过:

<?php 
header("Content-type: text/css");

$Idtemplate = $this->user->defaultTemplate;
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);
$clabel = $Thetemplate->descriptionlabelColor;
$cbackground = $Thetemplate->descriptionBkgColor;
$cfont =$Thetemplate->descriptionFontColor;
?>
<style type='text/css'>
.text4                          
{
color:                    <?=$clabel?>;// font and bkg colors are referred to likewise  
}
</style>

其中getdata.php包含代码:

<?php 
header("Content-type: text/css");
include('C:/sr/public/css/getdata.php');
?>
<style type='text/css'>
.text4                          
{
color:                    <?=$clabel?>;// font and bkg colors are referred to likewise  
}
</style>

它也没用。作为第四个变体,我尝试定义一个函数并从common.php中调用它:

<?php
$Idtemplate = $this->user->defaultTemplate;
include('C:/sr/application/models/Template.php');
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);
$clabel = $Thetemplate->descriptionlabelColor;
$cbackground = $Thetemplate->descriptionBkgColor;
$cfont =$Thetemplate->descriptionFontColor;
?>

common.php有:

<?php

function getLabelColor() { 

$clabel = '#001122';
return $clabel;
}

function getBkgColor() { 

$cbackground = '#002233';
return $cbackground;
}

function getFontColor() { 

$cfont = '#004455';
return $cfont;
}
?>

令人惊讶的是这有效。但是当我试图替换

<?php 
header("Content-type: text/css");
include('C:/sr/public/css/getdata.php');
?>
<style type='text/css'>
.text2                          
{
color: <?php echo getLabelColor();?>; /* Bkg and font colors are referred to likewise*/
}
</style>
使用

(以及相应功能中的$ cbackground和$ cfont)

$clabel = '#001122'; 

它停止了工作。所以我将getdata.php移动到包含所有上述功能的模型中:

$Idtemplate = $this->user->defaultTemplate;
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);
$clabel = $Thetemplate->descriptionlabelColor;
return ('#'.$clabel);

我正在调用以下函数:

<?php
Class fetchData extends Template
{

function getLabelColor() { 


$Idtemplate = 101// I had assign a known value here. I was not able to use $this->user->defaultTemplate; Not sure why I wont be able to use $this
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);
$clabel = $Thetemplate->descriptionlabelColor;//for future usage for dynamic color

return ('#'.$clabel);
}

function getBkgColor() { 


$Idtemplate = 101// I had assign a known value here. I was not able to use $this->user->defaultTemplate; Not sure why I wont be able to use $this
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);

$cbackground = $Thetemplate->descriptionBkgColor;//for future usage for dynamic color

return ('#'.$cbackground);
}

function getFontColor() { 


$Idtemplate = 101// I had assign a known value here. I was not able to use $this->user->defaultTemplate; Not sure why I wont be able to use $this
$Objtemplate = new Template();
$Thetemplate = $Objtemplate->fetchRow("id=" . $Idtemplate);

$cfont =$Thetemplate->descriptionFontColor;//for future usage for dynamic color
return ('#'.$cfont);
}

}
?>

这仅适用于.phtml,但不适用于common.php。我想common.php不允许实例化一个对象。

PS:这是我的common.php调用的样子:

include('C:/sr/application/models/getdata.php');
$datafetchObj  = new fetchData();

$clabel = $datafetchObj->getLabelColor(); //purple 51:0:153
$cbackground = $datafetchObj->getBkgColor(); //Light blue 102:102:204
$cfont = $datafetchObj->getFontColor(); 

3 个答案:

答案 0 :(得分:2)

将此行添加为common.php中的第一行页面:

header("Content-type: text/css");

答案 1 :(得分:2)

你只需使用

<link rel="stylesheet" type="text/css" media="screen" href="/css/mycss.php" />

然后你可以在你的CSS中使用php。你可以在php中添加带标题的适当标题(text / css)。

 // mycss.php
 <?php
 header("content-type:text/css");
 ?>

<style type='text/css'>
// Stylesheet
</style>

答案 2 :(得分:1)

我遇到了和你一样的问题,然后我将十六进制颜色更改为数据库中颜色的名称,一切正常。我不知道为什么十六进制的颜色不能像其他文本一样出来,但无论如何,只需改变颜色的名称:
E.I。:白色为#FFFFFF
我希望能帮到你。
编辑:我认为这也有帮助,
插入数据库时​​,使用hexdec()http://www.php.net/manual/en/function.hexdec.php,当从数据库显示时,使用dechex()http://php.net/manual/en/function.dechex.php。 然而,dechex将返回没有哈希(#)的十六进制,所以你可能需要像那样打印它:

<?php echo "#".dechex($decimal_number); ?>

我希望这是有用的伙伴。