Динамический контент в css файле - PullRequest
2 голосов
/ 12 марта 2012

Я изменяю веб-приложение. Это позволяет пользователю вводить шестнадцатеричные значения для цвета метки, цвета фона и цвета шрифта. Когда пользователь вводит значения и нажимает кнопку «Обновить шаблон». Мне нужно иметь возможность обновлять цвет фона, цвет метки и цвет шрифта в зависимости от шестнадцатеричных значений, которые вводит пользователь. Я храню цвет метки, цвет фона и цвет шрифта вместе с другой информацией о шаблоне в таблице 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 в common.php). :

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

Когда я пытаюсь включить код для извлечения информации о цвете из базы данных, он портит все форматирование, как будто программа не может увидеть мой файл .css. Я догадываюсь, что мне не разрешено создавать экземпляры объекта внутри heredoc в css, хотя я переименовал его в common.php. Что может быть обходным решением в этой ситуации?

UPDATE: Ну, я уже включил заголовок ("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>

К сожалению, это не сработало. Я также попробовал:

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

где getdata.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;
}
?>

где 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>

Удивительно, но это сработало. Но когда я попытался заменить

$clabel = '#001122'; 

(вместе с $ cbackground и $ cfont в соответствующих функциях) с

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

перестал работать. Поэтому я переместил 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" />

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Вы просто используете

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

, а затем вы можете использовать php внутри вашего css.Вы можете добавить соответствующие заголовки (text / css) с заголовком в php.

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

<style type='text/css'>
// Stylesheet
</style>
2 голосов
/ 12 марта 2012

Добавить эту строку в качестве первой строки страницы в common.php:

header("Content-type: text/css");
1 голос
/ 09 августа 2012

У меня была та же проблема, что и у вас, затем я изменил шестнадцатеричный цвет на имя цвета в базе данных, и все работало нормально. Я не знаю, почему шестнадцатеричный цвет не может появиться как другие тексты, но в любом случае, просто измените цвет на имя:
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); ?>

Надеюсь, это было полезно, приятель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...