Перейти к содержимому


Шаблоны печати, smarty, json - не получается подружить...

json smarty

Сообщений в теме: 7

#1 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 28 Октябрь 2019 - 17:15

Добрый день.
Пытаюсь в шаблон печати передать параметры в формате json.
Передаются и отображаются в формате json.
Но преобразовать эти параметры в массив функцией {$data|json_decode} не получается. Точнее получается string(0) "".
Кто-нибудь знает в чём может быть дело?
Может установленная версия smarty не поддерживает работу с json?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Октябрь 2019 - 18:02

Возможно у вас в $data невалидный json? В переменной smarty именно. Не пробовали просто вывести $data и посмотреть исходный код страницы?

#3 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 29 Октябрь 2019 - 19:56

Проверял, $data выводил. Что в исходном коде, что на странице выводится строка '{"data1":"valueData1","data2":"valueData2"}'.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 30 Октябрь 2019 - 16:41

Проверил сам. Json_decode без аргументов создает объект, а не массив, который smarty видимо преобразует в пустую строку. Если вывести {$data|json_decode:1}, т.е. с параметром "преобразовать в ассоциативный массив", то уже выводит слово Array. Если задать к примеру {$data|json_decode:1|print_r:1}, то выведет Array ( [data1] => valueData1 [data2] => valueData2 ) для вашего примера, а значит все работает.

Хотя, и преобразование в объект тоже сработало, {$data|json_decode:1|print_r:1} вывело stdClass Object ( [data1] => valueData1 [data2] => valueData2 )

#5 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 30 Октябрь 2019 - 17:22

Один из самых простых вариантов содержимого моего шаблона печати в части smarty с json...
{{$Параметры}|json_decode:1|var_dump}

Результат: NULL

Поле 'Параметры' типа "Простой текст".

Более сложные варианты - создавать переменные в шаблоне. Тоже пробовал...

У вас как бы выглядела ситуация с использованием полей КБ по правилам КБ?

Сообщение отредактировал goodcolor: 30 Октябрь 2019 - 17:23

Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 30 Октябрь 2019 - 18:00

Если вы из поля выводите json, то там кавычки экранируются в html сущности, поэтому и null в итоге из-за невалидности.

#7 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 30 Октябрь 2019 - 18:15

Как быть в таком случае?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#8 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 30 Октябрь 2019 - 18:18

Вроде получилось, предварительно пропустив значение из поля через html_entity_decode в шаблоне.
Благодарю за подсказку.

Сообщение отредактировал goodcolor: 30 Октябрь 2019 - 18:18

Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов





Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных