Все для создания и продвижения сайтов

Верстка, программирование, SEO

Исправление ошибки makeUrl() в MODX Revo

Рассмотрим, как можно исправить следующую ошибку, которая может возникнуть в консоли ошибок админки сайта.

`0` is not a valid integer and may not be passed to makeUrl()

Данная ошибка появляется из-за вызова пустой ссылки на сайте. К примеру, у вас где то есть запись

<a href="[[~[[+id]]]]">ссылка</a>

Где, [[+id]] оказывается равна 0 — об этом и ошибка, что ссылку на нулевой ресурс сгенерировать нельзя.

Либо у вас каким-то образом есть на сайте запись:

<a href="[[+0]]">ссылка</a>

Если самому найти не получается, то предлагаю следующее решение. Мы немного исправим вывод информации об этой ошибки, в модели ядра. Не переживайте, потом вы вернёте всё как было.

Открываем файл modx.class.php, который располагается по адресу core/model/modx

Ищем следующую запись

} 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('catch this...');
        }
        catch (Exception $e) {
            $this->log(modX::LOG_LEVEL_ERROR, $e->getTraceAsString());
        }
    }
    return $url;
}

Далее просматриваем страницы сайта, чтобы спровоцировать ошибку. Затем заходим в админку и в логах видим следующее

[2015-10-11 12:23:43] (ERROR @ /index.php) `[[+id]]` is not a valid integer and may not be passed to makeUrl()
[2015-10-11 12:23:43] (ERROR @ /index.php)
#0 htdocs\core\model\modx\modparser.class.php(765): modX->makeUrl('[[+id]]', '', '', -1)
#1 htdocs\core\model\modx\modparser.class.php(385): modLinkTag->process(NULL)
#2 htdocs\core\model\modx\modparser.class.php(164): modParser->processTag(Array, false)
#3 htdocs\core\model\modx\modchunk.class.php(92): modParser->processElementTags('[[$tpl.news_site...', '<div class="mai...', false, false, '[[', ']]', Array, 10)
#4 htdocs\core\model\modx\modx.class.php(1558): modChunk->process(Array)
#5 htdocs\core\components\login\model\login\login.class.php(125): modX->getChunk('tpl.news_site...', Array)

В #3, а также #5 будет показано место, где эта ошибка, либо чанк с ней.

Проверьте вызов ссылок, в них и ошибка.

После этого откатите файл до исходного состояния

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.