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