2012-03-12 26 views
2

ウェブアプリケーションを変更しています。これにより、ユーザーはlabel-color、background-color、およびfont-colorの16進値を入力できます。ユーザが値を入力し、「テンプレートを更新」をクリックすると。私は、ユーザーが入力する16進値に応じて、背景色、ラベルの色、およびフォントの色を更新できるようにする必要があります。私はラベルの色、背景色とフォントの色を他のテンプレート情報とともにMySQLテーブルに保存しています。私は、ビューを制御するすべての.phtmlファイルに次の操作を行うことができます。CSSファイルの動的コンテンツ

$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.csscommon.phpと改名しました):

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

データベースから色情報を取得するコードをインクルードしようとすると、プログラムが自分の.cssファイルを参照できないように、すべての書式が失われます。私の感覚は、common.phpという名前に変更したにもかかわらず、私がhessの中でオブジェクトをインスタンス化することは許可されていないということです。この状況で回避策がありますか?

更新: 私は既にヘッダー( "Content-type:text/css")を含んでいました。しかし、私は次のことを確かめるためにもう一度試しました。

<?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> 

は:

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

common.phpのは有している場合:これは働いていた驚くべき

<?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> 

を。私は

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

で(各機能の$ cbackgroundと$ cfontと一緒に)

$clabel = '#001122'; 

を交換しようとしたとき、しかし、それは動作を停止。だから私はgetdataを動かした。上記の全ての機能を含めたクラス作ったモデルにPHP:

<?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); 
} 

} 
?> 

が、私は以下のような関数を呼び出していましたが:

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(); 

これは.phtmlから働いていたではなく、common.phpのから。 common.phpはオブジェクトのインスタンス化を許可されていないと思います。

PS:common.php内のページの最初の行として次の行を追加し

<link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl();?>/css/common.php" /> 
+0

解決済みですか? –

+0

いいえ、それは解決されません。上記のUPDATEをご覧ください。 – Sumit

答えて

2

:私のcommon.phpのコールがどのように見えるこの

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

'header'コールは、* any *出力の前に来なければならないことに注意してください。空白/改行もあります。さもなければ、PHPは "ヘッダがすでに送信されました"というエラーを投げます。 –

+0

上記のUPDATEをご覧ください。 – Sumit

2

あなただけ

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

そしてあなたのCSSの中でPHPを使うことができます。あなたは適切なヘッダ(text/css)をヘッダにphpで追加することができます。

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

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

上記のUPDATEをご覧ください。 – Sumit

1

私はあなたと同じ問題を抱えていましたが、その後、16進数の色をデータベースの色の名前に変更しました。私はなぜ16進数の色が他のテキストのように出ることができないのか分からないが、とにかく単に色を名前に変更するだけです:
E.I .: #FFFFFFの白
私はあなたのためにうまくいけば幸いです。 EDIT
私は
データベースに挿入し、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); ?> 

私はそれが有用仲間だった願っています。

関連する問題