Исправление ошибки `makeUrl()` в MODX Revo: '`0` is not a valid integer'
-
При работе с MODX Revolution вы можете столкнуться с ошибкой в консоли админки:
0is 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 ресурсов в шаблонах и сниппетах.
© 2024 - 2025 ExLends, Inc. Все права защищены.