Уходит в бесконечное сохранение, как исправить?
Есть плагин что при сохранение ресурса делает действия, и потом сохраняет. И всё время выходит эта ошибка.
[2022-03-02 14:53:26] (ERROR @ /var/www/vhosts/site.kz/httpdocs/core/components/migx/model/migx/migx.class.php: 1860) PHP warning: json_decode() expects parameter 1 to be string, array given
Но если я отключу один плагин, то оно сохраняет нормально, хотя в этом плагине я проверял данные поступают как строка.
Когда этот плагин отключен, сохраняется нормально, но эта ошибка всё ещё выходит.
Были записаны так
[2022-03-02 14:53:26] (ERROR @ /var/www/vhosts/site.kz/httpdocs/core/components/migx/model/migx/migx.class.php: 1860) PHP warning: json_decode() expects parameter 1 to be string, array given
Но если я отключу один плагин, то оно сохраняет нормально, хотя в этом плагине я проверял данные поступают как строка.
Когда этот плагин отключен, сохраняется нормально, но эта ошибка всё ещё выходит.
<?php
switch ($modx->event->name) {
case 'OnDocFormSave':
if ($resource->get('template') == 3 && !empty($resource->getTVValue('reviews'))) {
$activeReviews = 0;
$totalActiveRating = 0;
$avgRating = 0;
try {
try {
$reviews = json_decode($resource->getTVValue('reviews'), true);
$modx->log(1, gettype($resource->getTVValue('reviews')));
if($reviews){
foreach($reviews as $key => $value){
if($value['is_active'] == '1'){
$activeReviews += 1;
$totalActiveRating += $value['rating'];
}
}
$avgRating = $totalActiveRating / 5;
}
} catch(Exception $e) {
$avgRating = 0;
$modx->log(1, 'Бред 0');
$modx->log(1, $e);
}
try {
$resource->setTVValue('ratingCount', $avgRating);
$resource->setTVValue('activeReviewsCount', $activeReviews);
} catch(Exception $e) {
$modx->log(1, 'Бред 1');
$modx->log(1, $e);
}
}
catch(Exception $e) {
$modx->log(1, 'Бред 2');
$modx->log(1, $e);
}
}
}При этом данные в tv reviewsБыли записаны так
$ar = json_decode($reviews->get('value'), true);
$new_id = (empty($ar)) ? 1 : intval($ar[count($ar)-1]['MIGX_id'])+1;
array_push($ar, array(
'MIGX_id' => $new_id,
'full__name' => $name,
'rating' => $rating,
'text' => $review,
'is_active' => 0,
));
$tvcid = $modx->getObject('modTemplateVar',array('id'=> 25)); // Указываем имя нужного TV
$tvcid->setValue($currentResourceId, json_encode($ar)); // Записываем в TV значение
$tvcid->save(); Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Открываете консоль браузера на вкладке Сеть (Network), очищаете там все, чтобы было удобно. Нажимаете Сохранить ресурс, смотрите что там не так
ты получаешь уже имеющиеся отзывы из ресурса $reviews.
А вот тут
Ты устанавливаешь значение чего? $tvcid объект класса modTemplateVar, и он не хранит значение переменной шаблона. Мне кажется надо устанавливать значение переменной в объект $reviews.
MIGX_id обязательно нужно ставить, иначе сам он не подставляет именно в код
И всё так же уходит в бесконечное сохраннее если этот плагин включен
1. ошибка в Консоли браузера
2. ошибка в Логе modx
3. ошибка в Логе Сервера
4. Если зайти в Админке, в ресурс, MIGX нормально показывает? Это вопрос про ошибку на 1860 строке prnt.sc/3CQsst937gOr
5. Попробовать(естественно с переделками) данный код в Console
2)Пусто
3)Уже не стал смотреть
4)Да нормально
5)Удалил этот плагин и сделал как снипет