Добрый день. Я занимаюсь web-разработкой и почти всем, что с этим связано.

MODX Revolution: если не загружается список пакетов

Преамбула

Проблема обычно возникает, если сервер работает под Windows.

В консоли браузера можно увидеть следующую ошибку:

Uncaught SyntaxError: Unexpected token }

Ответ запроса, который должен вернуть список пакетов, выглядит так:

{"success":true,"total":"471","results":}

Не загружаются пакеты

Решение

Вообще, изменять системные файлы — это плохая практика, потому что проблема может всплыть при обновлении. Но решение состоит в том, чтобы открыть файл core/xpdo/xpdo.xpdo.class.php и изменить метод toJSON, а также добавить ещё один — arrayEncodeUTF8.

/**
 * Converts a PHP array into a JSON encoded string.
 *
 * @param array $array The PHP array to convert.
 * @return string The JSON representation of the source array.
 */
public function toJSON($array) {
    $encoded= '';
    if (is_array ($array)) {
        if (!function_exists('json_encode')) {
            if (@ include_once (XPDO_CORE_PATH . 'json/JSON.php')) {
                $json = new Services_JSON();
                $encoded= $json->encode($array);
            }
        } else {
 
            $array = self::arrayEncodeUTF8($array);
 
            $encoded= json_encode($array);
 
        }
    }
    return $encoded;
}
 
public static function arrayEncodeUTF8($array) {
    foreach($array as $key => $value) {
        if (!is_array($value) && is_string($value)) {
            json_encode($value);
            if (json_last_error() == 5) {
                $array[$key] = iconv('CP1251', 'UTF-8', $value);
            }
        } else {
            $array[$key] = self::arrayEncodeUTF8($value);
        }
    }
    return $array;
}

Комментарии