Откуда ноги растут modsnippet/38.include.cache.php

Добрый день,
В письмах на эл. почту по новому заказу получаю ошибку:

Warning: json_decode() expects parameter 1 to be string, array given in ../core/cache/includes/elements/modsnippet/38.include.cache.php on line 95

Далее идет полная информация в письме согласно чанку, т.е. все работает.

Что может приводить к генерации данного предупреждения?
SaLacoste
15 ноября 2013, 10:20
modx.pro
4 117
0

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

Василий Наумкин
15 ноября 2013, 14:21
0
Скорее всего, новый pdoTools + старый MS2.
    SaLacoste
    15 ноября 2013, 17:55
    0
    Первично такой проблемы не было. Все функционировало корректно.
    Судя по всему, ошибка появилась после обновления чанка ms_options_outer.tpl

    <div class="control-group">
            <label class="control-label">[[%ms2_product_[[+name]]]]:</label>
            <div class="controls">
                    <select name="options[[[+name]]]" class="span2">[[+rows]]</select>
            </div>
    </div>

    Как ее можно исправить без полного обновления MS2?
      Василий Наумкин
      15 ноября 2013, 17:59
      0
      Это потому, что первично у тебя цвета не сохранялись в JSON поле заказа.

      Найди сниппет с id = 38, затем найди где там json_decode или $modx->fromJSON и допиши проверку на массив, чтобы эти функции применялись только к строкам.

      Если обновляешь pdoTools, то нужно обновлять и MS2 — они очень тесно связаны.
        SaLacoste
        18 ноября 2013, 18:08
        0
        У меня pdotools-1.8.0-rc5 и minishop2-2.1.1-pl2, что из них старее?

        Нашел json_decode, но это уже сверх моих познаний.
          Сергей
          18 ноября 2013, 18:27
          0
          Там где json_decode:
          if(!is_array(то что передается в json_decode)){
          	...сам json_decode...
          }
            SaLacoste
            18 ноября 2013, 18:51
            0
            По дефолту ниже следует еще одно условие, которое тогда никогда не сработает или я ошибаюсь?

            if(!is_array($options = json_decode($row['options'],1)));
                {
            	if (!empty($options) && is_array($options)) {
            		foreach ($options as $key => $value) {
            			$row['option.'.$key] = $value;
            		}
            	}
                }
              Сергей
              18 ноября 2013, 18:59
              0
              Немного не так
              if(is_array($row['options'])) {
              		$options = $row['options'];
              	} else {
              		$options = json_decode($row['options'],1);
              	}
              	if (!empty($options) && is_array($options)) {
              		foreach ($options as $key => $value) {
              			$row['option.'.$key] = $value;
              		}
              	}
              Если у нас и так массив, то мы не трогаем, если в json, то конвертируем в массив.
                Василий Наумкин
                18 ноября 2013, 19:58
                0
                Верно.

                В последней версии почти так и есть:
                $options = !is_array($row['options'])
                	? $modx->fromJSON($row['options'])
                	: $row['options'];
                  Сергей
                  18 ноября 2013, 20:04
                  0
                  Сколько не пытаюсь, но не могу привыкнуть к краткой записи if. Особенно после python с его «Красивое лучше, чем уродливое. Явное лучше, чем неявное. Простое лучше, чем сложное.».
                    Василий Наумкин
                    19 ноября 2013, 05:52
                    1
                    0
                    Тут всё просто:
                    $результат = условие
                    	? если да, то это
                    	: если нет, то вот это;

                    Очень удобно, и можно писать в одну строку:
                    $результат = условие ? если да, то это : если нет, то вот это;
            Василий Наумкин
            18 ноября 2013, 19:56
            0
            Обнови и то, и другое.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11