При работе с MODX Revolution вы можете столкнуться с ошибкой в консоли админки: 0 is not a valid integer and may not be passed to makeUrl().
Разберемся, как её исправить.
Причины возникновения ошибки
Ошибка возникает, когда в ссылке указан некорректный ID ресурса.
Примеры проблемных вызовов:
Ссылка с пустым/нулевым плейсхолдером:
<a href="[[~[[+id]]]]">Ссылка</a>
Если [[+id]] равен 0 или не определен, MODX не может сгенерировать URL.
Прямая ссылка на 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 — ссылается на сниппет или компонент, вызвавший ошибку.
Исправление кода
Откройте указанный в логах чанк/шаблон.
Замените некорректные ссылки, например:
<!-- Было -->
<a href="[[~[[+id]]]]">Подробнее</a>
<!-- Стало (проверка на существование ID) -->
<a href="[[~[[+id:notempty=`[[+id]]`]]]]">Подробнее</a>
Или убедитесь, что плейсхолдер [[+id]] передается корректно.
Важно!
После исправления ошибок верните исходный код файла modx.class.php, чтобы избежать проблем с обновлениями и производительностью.
Если проблема осталась — проверьте все вызовы [[~...]] и работу с ID ресурсов в шаблонах и сниппетах.