Сниппет выбивает сайт в 500 ошибку если вызывается только один раз

Столкнулся с непонятной ошибкой, а именно:
Есть сниппет который сортирует данные полученные из msproducts
<?php
$data = json_decode($data, true);

function transpose($array) {
    array_unshift($array, null);
    return call_user_func_array('array_map', $array);
}
$result = call_user_func_array('array_merge', transpose(array_chunk($data , 6)));
return json_encode($result);
Данные я в него отправляю таким образом:
{set $res_array = '!msProducts' | snippet : [
    'parents' => $id,
    'limit' => 0,
    'return' => 'json'
]}
    {set $colors_full_array = '!sort3' | snippet : [
        'data' => $res_array
    ] | fromJSON}
И проблема в том что сайт прогружается до начала этого кода и в консоли появляется ошибка 500, в логах все чисто как на сервере так и в модкс

Если я добавляю просто рядом второй раз аналогичный вызов, то первый отрабатывает нормально — на втором вылетает 500

С чем может быть связано?
Вячеслав Варов
15 ноября 2022, 10:53
modx.pro
322
0

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

Вячеслав Варов
15 ноября 2022, 10:57
0
{set $res_array = '!msProducts' | snippet : [
    'parents' => $id,
    'limit' => 0,
    'return' => 'json'
]}
    {set $full_colors_array = '!sort3' | snippet : ['data' => $res_array, 'cols' => 6] | fromJSON}
     {foreach $full_colors_array as $res}
        <div class="kc-slide">
            <div class="kc-item-block">
              <div class="kc-item-image-wrap">
                <img class="kc-item-img" src="{$res.thumb}">
              </div>
              <div class="kc-item-name">{$res.pagetitle} </div>
            </div>
        </div>
    {/foreach}
    {set $full_colors_array = '!sort3' | snippet : ['data' => $res_array, 'cols' => 6] | fromJSON}
Так работает первый вызов на втором вылетает

{set $res_array = '!msProducts' | snippet : [
    'parents' => $id,
    'limit' => 0,
    'return' => 'json'
]}
    {set $full_colors_array = '!sort3' | snippet : ['data' => $res_array, 'cols' => 6] | fromJSON}
     {foreach $full_colors_array as $res}
        <div class="kc-slide">
            <div class="kc-item-block">
              <div class="kc-item-image-wrap">
                <img class="kc-item-img" src="{$res.thumb}">
              </div>
              <div class="kc-item-name">{$res.pagetitle} </div>
            </div>
        </div>
    {/foreach}
так просто вылетает
    Константин Ильин
    15 ноября 2022, 11:23
    +2
    Странно, что в логах пусто.

    скорее всего вы вызываете функцию два раза, нужно проверять ее наличие
    <?
    if (!function_exists('transpose')) {
        function transpose($array) {
            array_unshift($array, null);
            return call_user_func_array('array_map', $array);
        }
    }

    Я обычно оборачиваю вызов сниппета в скобки если еще каким-то модификатором обрабатываю
    {set $full_colors_array = ('!sort3' | snippet : ['data' => $res_array, 'cols' => 6]) | fromJSON}
      Вячеслав Варов
      15 ноября 2022, 11:31
      0
      Спасибо! Действительно проблема была в этом, из-за множественного обявления функции, только правда не понятно почему логи пустые.

      За скобки да действительно так удобнее)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3