Исправление ошибки `makeUrl()` в MODX Revo: '`0` is not a valid integer'
-
При работе с 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 ресурсов в шаблонах и сниппетах.