#javascript #php #css #json
#javascript #php #css #json
Вопрос:
У меня есть некоторые закодированные данные JSON, хранящиеся в моей базе данных, например, следующие:
{".main-header":"{"color":"rgb(5, 213, 255)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"35px"}",".main-header-free":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-lunch-price":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-week":"{"color":"rgb(62, 214, 24)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-week-week":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".day-name":"{"color":"rgb(237, 129, 5)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".lunchtext":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"Baskerville","font-size":"13px"}",".puffheading":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".pufftext":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"Baskerville","font-size":"13px"}",".re_name":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_address":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_phone":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_webpage":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}","html":"{"background":"none"}"}
Вот как я бы сделал это с помощью jquery:
var currentStyle = {{ $theme->css}};
$.each(currentStyle, function( index, value ) {
$(index.toString()).css(jQuery.parseJSON(value)));
});
В моем контроллере я визуализирую представление, а затем преобразую его в PDF:
$view = View::make('pdf.template')
->with('css', $css);
$pdf = PDF::loadHTML($view);
return $pdf->stream();
Это означает, что отображаемое представление вернет DOM в исходное состояние, из-за этого я не могу использовать какой-либо JavaScript для применения JSON CSS, скажем, с помощью jquery.
Итак, могу ли я каким-то образом напрямую преобразовать этот JSON в CSS через PHP?
Комментарии:
1. Вы пытались проскочить в <style>your css here</style>
2. Обновленный вопрос… Может быть, теперь вы понимаете лучше.
Ответ №1:
Вам нужно будет сгенерировать действительный css в вашем php-скрипте:
$str = '{".main-header":"{"color":"rgb(5, 213, 255)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"35px"}",".main-header-free":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-lunch-price":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-week":"{"color":"rgb(62, 214, 24)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".sub-header-week-week":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".day-name":"{"color":"rgb(237, 129, 5)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".lunchtext":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"Baskerville","font-size":"13px"}",".puffheading":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"NeutraText-Book","font-size":"22px"}",".pufftext":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"Baskerville","font-size":"13px"}",".re_name":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_address":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_phone":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}",".re_webpage":"{"color":"rgb(0, 0, 0)","background-color":"rgba(0, 0, 0, 0)","font-family":"'Times New Roman'","font-size":"13px"}","html":"{"background":"none"}"}';
$arr = json_decode($str, true);
$css='';
foreach($arr as $key => $val){
$css.=$key . '{' . PHP_EOL;
foreach(json_decode($val, true) as $k => $v){
$css.=$k . ':' . $v . ';' . PHP_EOL;
}
$css.= '}' . PHP_EOL;
}
//to see result
//echo '<pre>' . $css . '</pre>';
$view = View::make('pdf.template')
->with('css', $css);
$pdf = PDF::loadHTML($view);
return $pdf->stream();
Затем в вашем представлении отображается эхо $css
<style>...</style>
с тегами.
Обратите внимание, что новые строки (PHP_EOL) предназначены только для форматирования и не нужны.
Комментарии:
1. Если вы попытаетесь расшифровать строку, которую предоставляет строка, вы увидите, что это не удается, поскольку не декодируется, что атрибуты элемента разделены.
2. @user3121056 Извините, я не понимаю, что вы имеете в виду