Преобразование JSON в CSS с помощью PHP

#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 Извините, я не понимаю, что вы имеете в виду