PHP warning: Invalid argument supplied for foreach()
Здравия! Журнал ошибок кишит ошибками:
(ERROR @ /home/d/dreamt74/dreamt74.beget.tech/public_html/core/model/modx/modx.class.php: 748) PHP warning: Invalid argument supplied for foreach()
Строка 748
(ERROR @ /home/d/dreamt74/dreamt74.beget.tech/public_html/core/model/modx/modx.class.php: 748) PHP warning: Invalid argument supplied for foreach()
Строка 748
foreach ($resourceMap as $parentId => $mapNode) {
if (array_search($id, $mapNode) !== false) {
$parents[]= $parentId;
break;
}
}
Что значат эти строки? Как исправить ошибку? Подскажите пожалуйста. Комментарии: 24
Это означает, что в цикл передан не итерируемый элемент, грубо говоря не массив.А чтобы исправить, надо смотреть стэк вызова, так как дело точно не в исходниках Modx.
Попробовал взять для примера карточку товара. Удалял все сниппеты, которые на странице, обновлял страницу и смотрел лог, ошибка сохранялась, отключал плагины, аналогично. Дошло до того, что удалил совершенно весь код страницы, обновил ошибка осталась…
$resourceMap это карта ресурсов modx. Она генерируется при первой инициализации контекста modx и сохраняется в кеш.
Ошибка значит, что $resourceMap пустая. Проверьте кеш modx. Что там права на запись есть. Почистите кеш. И проверьте чтоб плагины $resourceMap не прибивали. Это иногда рекомендуют на больших сайтах.
Ошибка значит, что $resourceMap пустая. Проверьте кеш modx. Что там права на запись есть. Почистите кеш. И проверьте чтоб плагины $resourceMap не прибивали. Это иногда рекомендуют на больших сайтах.
файл кеша \core\cache\context_settings\web\context.cache.php
Спасибо, попробовал полностью удалить папку cache, ошибка остается, права на папку 0700
в файле \core\cache\context_settings\web\context.cache.php часть массива resourceMap присутствует?
Только метод научного тыка. Смотреть по коду что вообще происходит. Пробовать убирать добавлять что-то и так пока не поймешь в чем причина.
Или modx переставить или сайт заного переписать с обновленным модекс
Только метод научного тыка. Смотреть по коду что вообще происходит. Пробовать убирать добавлять что-то и так пока не поймешь в чем причина.
Или modx переставить или сайт заного переписать с обновленным модекс
По поиску прошел — отсутствует. Посмотрел на других сайтах, там есть. Что это значит? Куда копать?
resourceMap либо не генерируется либо его что-то прибивает. Не генерируется значит что то не так с модекс. Что-то прибивает вот здесь modx.pro/solutions/22267 рекомендуют плагин который прибивает
Костыль OnMODXInit ниже может послужить хорошим решением данной проблемы, и будет надёжным подспорьем довольно долгое время.
Искушённый читатель предложит расширить стандартный класс менеджера кеширования и подменить его. На мой взгляд избавиться от плагина потом проще// Resource map patch to reduce parse time if( ! empty( $modx->context->resourceMap ) ) { $options = [ xPDO::OPT_CACHE_KEY => 'context_settings/' . $modx->context->key ]; if( $val = $modx->getCacheManager()->get( 'context', $options ) ) { $val[ 'resourceMap' ] = []; $modx->getCacheManager()->set( 'context', $val, 0, $options ); } } //--//
Создал плагин с кодом выше на событие OnMODXInit, ошибка не ушла. Вариант переустановить modX?
А вы с нуля ставили MODX? Если так, то попробуйте накатить ту же версию или на 1 версию выше. Кстати, какая версия MODX? php?
modX: 2.8.4-pl
Версия PHP: 7.4
Сайт перенес с другого хостинга
Версия PHP: 7.4
Сайт перенес с другого хостинга
Ну я бы проверил что все файлы перенеслись.
Или переустановил той же версией MODX 2 8 4.
Еще бы выставить всем папкам и файлам права верные для бегета папки 700, файлы 644.
Домен я так понимаю поменялся?
Или переустановил той же версией MODX 2 8 4.
Еще бы выставить всем папкам и файлам права верные для бегета папки 700, файлы 644.
Домен я так понимаю поменялся?
Да, домен другой, пробую переустановку запустить, почему-то не работает кнопка далее. По клику обновляется эта же страница. Не переходит на следующий шаг. disk.yandex.ru/i/UxY4HF5lwPYZIw
Вы 4 файла корректировали для нового домена-хоста?
Корректные права на каталог 755
На папку setup 755 поставил, все равно кнопка не срабатывает
Так плагин не надо было создовать. Надо было проверить что похожего плагина нет
То есть нужно пройти по всем плагином и найти этот код?
// Resource map patch to reduce parse time
if( ! empty( $modx->context->resourceMap ) ) {
$options = [ xPDO::OPT_CACHE_KEY => 'context_settings/' . $modx->context->key ];
if( $val = $modx->getCacheManager()->get( 'context', $options ) ) {
$val[ 'resourceMap' ] = [];
$modx->getCacheManager()->set( 'context', $val, 0, $options );
}
}
//--//
да
А можно поступить так, по очереди отключать каждый плагин и смотреть, исчезла ли ошибка?
можно. Вы наверно так и делали. Я просто подсказал с чем может быть связана ошибка. Что именно у вас мне не известно
Поотключал некоторые плагины. Странно, ошибка пропала, однако в \core\cache\context_settings\web\context.cache.php массива resourceMap по прежнему нет
Выяви на каком именно плагине и его код сюда.
Случайно наткнулся на старый запрос.
У кого такая ситуация будет — смотрите сразу таблицы базы данных: скорее всего при переносе сайта потеряны индексы и ключи таблиц. Отсюда все проблемы.
У кого такая ситуация будет — смотрите сразу таблицы базы данных: скорее всего при переносе сайта потеряны индексы и ключи таблиц. Отсюда все проблемы.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.