Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  1. Главная
  2. Категории
  3. CMS
  4. MODX
  5. Исправление ошибки `makeUrl()` в MODX Revo: '`0` is not a valid integer'

Исправление ошибки `makeUrl()` в MODX Revo: '`0` is not a valid integer'

Запланировано Прикреплена Закрыта Перенесена MODX
1 Сообщения 1 Постеры 43 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsK Не в сети
    kirilljsK Не в сети
    kirilljs
    js
    написал в отредактировано kirilljs
    #1

    При работе с MODX Revolution вы можете столкнуться с ошибкой в консоли админки: 0 is not a valid integer and may not be passed to makeUrl().
    Разберемся, как её исправить.


    Причины возникновения ошибки

    Ошибка возникает, когда в ссылке указан некорректный ID ресурса.
    Примеры проблемных вызовов:

    1. Ссылка с пустым/нулевым плейсхолдером:
       <a href="[[~[[+id]]]]">Ссылка</a>
    

    Если [[+id]] равен 0 или не определен, MODX не может сгенерировать URL.

    1. Прямая ссылка на ID 0:
       <a href="[[+0]]">Ссылка</a>
    

    Ресурс с ID 0 не существует, что вызывает ошибку.


    Решение: диагностика через модификацию ядра

    Если проблемный код не удается найти вручную, выполните следующие шаги:

    1. Резервная копия
    Создайте бэкап файла core/model/modx/modx.class.php — мы будем его модифицировать.

    2. Добавление трейса ошибки
    Найдите в файле блок:

    } else {
        $this->log(modX::LOG_LEVEL_ERROR, '`' . $id . '` is not a valid integer and may not be passed to makeUrl()');
    }
    return $url;
    

    Замените его на:

    } else {
        $this->log(modX::LOG_LEVEL_ERROR, '`' . $id . '` is not a valid integer and may not be passed to makeUrl()');
        try {
            throw new Exception('Trace error');
        } catch (Exception $e) {
            $this->log(modX::LOG_LEVEL_ERROR, $e->getTraceAsString());
        }
    }
    return $url;
    

    3. Провоцируем ошибку
    Перейдите на страницы сайта, где может возникать ошибка.
    Затем проверьте логи MODX (Управление → Логи ошибок).


    Анализ логов

    В логах появится трейс ошибки, например:

    [2023-10-05 14:30:00] (ERROR @ /index.php) `[[+id]]` is not a valid integer and may not be passed to makeUrl()
    [2023-10-05 14:30:00] (ERROR @ /index.php)
    #0 /site/core/model/modx/modparser.class.php(765): modX->makeUrl('[[+id]]', '', '', -1)
    #1 /site/core/model/modx/modparser.class.php(385): modLinkTag->process(NULL)
    #2 /site/core/model/modx/modparser.class.php(164): modParser->processTag(Array, false)
    #3 /site/core/model/modx/modchunk.class.php(92): modParser->processElementTags('[[$tpl.news]]', '<div>...', false, false, '[[', ']]', Array, 10)
    #4 /site/core/model/modx/modx.class.php(1558): modChunk->process(Array)
    #5 /site/assets/components/mypackage/snippet.php(20): modX->getChunk('tpl.news', Array)
    

    Важные строки:

    • #3 — указывает на чанк tpl.news, где используется проблемная ссылка.
    • #5 — ссылается на сниппет или компонент, вызвавший ошибку.

    Исправление кода

    1. Откройте указанный в логах чанк/шаблон.
    2. Замените некорректные ссылки, например:
       <!-- Было -->
       <a href="[[~[[+id]]]]">Подробнее</a>
       
       <!-- Стало (проверка на существование ID) -->
       <a href="[[~[[+id:notempty=`[[+id]]`]]]]">Подробнее</a>
    

    Или убедитесь, что плейсхолдер [[+id]] передается корректно.


    Важно!

    После исправления ошибок верните исходный код файла modx.class.php, чтобы избежать проблем с обновлениями и производительностью.


    Если проблема осталась — проверьте все вызовы [[~...]] и работу с ID ресурсов в шаблонах и сниппетах.

    1 ответ Последний ответ
    0

    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы