Помогите разобрать json TV

есть дополнительное поле содержащее json
[{"color":null,"size":"L","barCode":"5600008931013","count":6},
{"color":null,"size":"M","barCode":"5600008930016","count":6},
{"color":null,"size":"S","barCode":"5600008929010","count":10},
{"color":null,"size":"XL","barCode":"5600008932010","count":7}]
как мне его разобрать?
подскажите что почитать, что бы я сам смог это сделать или помогите его разобрать.


это tv в карточке товара minishop2 которое я получил из импорта 1C

на странице выводится так:
Размер: {значение size} — если count у этого размера < 0 то добавить класс какой то
Штрихкод: {значение barCode}
Цвет: {значение color}
Александр Иващенко
21 февраля 2018, 11:53
modx.pro
1 460
0

Комментарии: 6

Александр Иващенко
21 февраля 2018, 14:55
0
из всего сниппета я только написал:
<?php
$array = $modx->resource->getTVValue('12'); // id моего TV
echo json_encode($array);
и мне вывело:
[{\"color\":null,\"size\":\"L\",\"barCode\":\"5600008931013\",\"count\":6},
{\"color\":null,\"size\":\"M\",\"barCode\":\"5600008930016\",\"count\":6},
{\"color\":null,\"size\":\"S\",\"barCode\":\"5600008929010\",\"count\":10},
{\"color\":null,\"size\":\"XL\",\"barCode\":\"5600008932010\",\"count\":7}]"
Максим
21 февраля 2018, 15:10
+1
Я могу ошибаться а что вернет $array[0] перед енкодингом? Мне просто кажется что вы получаете массив.
Проверить можно так
var_dump($array[0]);
    Михаил
    21 февраля 2018, 15:51
    +1
    {$_modx->resource.tv_name|fromJSON}
      Александр Иващенко
      21 февраля 2018, 17:07
      0
      написал такой сниппет:
      <?php
      
      $array = $modx->resource->getTVValue('12'); // получаю tv с которым работаю
      $response = json_decode($array, true);  //декодирую json
      
      switch ($myparam) {
          case "size" :
              foreach ($response as $element) {
                  if ($element['count'] > 0) {
                      echo "<label class=\"barCode_" . $element['barCode'] . "\">
                          <span>" . $element['size'] . "</span>
                          <input type=\"radio\" name=\"options[size]\" value=\"" . $element['size'] . "\">
                      </label>";
                  }
                  else{
                      echo "<label class=\"barCode_" . $element['barCode'] . "\">
                          <span>" . $element['size'] . "</span>
                          <input type=\"radio\" name=\"options[size]\" value=\"" . $element['size'] . "\" disabled=\"disabled\">
                      </label>";
                  }
              }
          break;
          
          case "pcode" :
              foreach ($response as $element) {
                  echo "<span class=\"barCode_" . $element['barCode'] . "\">" . $element['barCode'] . " </span>";
              }
          break;
          case "pcodetrim" :
              foreach ($response as $element) {
                  echo "<span class=\"barCode_" . substr($element['barCode'], 8) . "\">" . substr($element['barCode'], 8) . " </span>";
              }
          break;
      }
      Как мне его передетать так, что бы для каждого $element['size'] выводились свои $element['barCode']
      вывожу сниппет так в 2х местах:
      [[count_snip_size? &myparam=`size`]] — размер
      [[count_snip_size? &myparam=`pcode`]] — штрихкод

      это лучше через js делать или на php в сниппете реализовывается?

      вот страница где я вывожу этот сниппет
      Там где размеры — мои размеры
      И в описании там есть ширихкод

      т.е. к каждому размеру выводить свой штрихкод я хочу. Подскажите пожалуйста как дальше делать
        Максим
        21 февраля 2018, 17:18
        +1
        Штрихкод менять аяксом при изменении размера. Ну и соответственно изначальная установка штрихкода должна быть реализована JS-ом.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6