Дмитрий
а, это вообще рандомный запрос
Dmitry
Не будет state
Дмитрий
ну ты же получил запись, ну дальше переменная и свойство id
Дмитрий
$row = $db->setQuery($query)->loadObject();
$row->id
Ruslan
Типичных ошибок при обновлении компонентов там не вижу, компонент работал на Joomla 3.10 корректно 😔
Dmitry
if (!is_array($data->service))
{
$data->service = explode(',', $data->service);
}
Dmitry
А если data не объект?)
Dmitry
Думаю, что происходит ошибка при сохранении, потом вызывается форма и попытка замапить пустые данные на форму. А так как item пустой, возникает фатал при попытке назначения свойству service массива.
Dmitry
Когда это починишь, останется понять, почему сохранение падает
Ruslan
Dmitry
Но там тоже какое-то значение в базу некорректно приходит.
Dmitry
Dmitry
Данные обычно из базы
Dmitry
А если в базе ничего нет, то item будет null
Dmitry
Dmitry
В итоге пустой item
Dmitry
Это теория ))
Ruslan
Вот например данные в админке для flat-a,
Подскажите где искать код сохранения, в котроллере?
Dmitry
Это теория ))
// Convert to the CMSObject before adding other data.
$properties = $table->getProperties(1);
$item = ArrayHelper::toObject($properties, CMSObject::class);
Dmitry
Dmitry
Потому что в модели ничего нет, значит стандартно сохраняет
Dmitry
Возможно в контроллере что-то обрабатывается
Ruslan
У меня есть такой код в вью для сабмита формы сохранения
<script type="text/javascript"> Joomla.submitbutton = function(task) {
if (task == 'flat.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { Joomla.submitform(task, document.getElementById('item-form'));
} };
</script>
Dmitry
Dmitry
Вью вообще не смотри пока что
Ruslan
Вот тут, в котролере есть функция сохранения
Dmitry
Вот тут видно, что идёт попытка записать пусто вместо числа в поле nasutki что-то там )
Ruslan
Но бегло не вижу тут ошибок, помню что у меня били предупреждения после обновления с этой функцией
protected function postSaveHook(Joomla\CMS\MVC\Model\BaseDatabaseModel $model, $validData = array()){
Dmitry
А не, по моему поле linkedua, если я правильно понял
Dmitry
$model->save($data);
Dmitry
Вот тут сделай dump данных перед save, посмотри что там в них.
Dmitry
Если отладчика нет
Ruslan
👌👍👍
Dmitry
var_dump($data); die;
$model->save($data);
Dmitry
Ну и гляди, чего там не хватает для колонки linkedua
Dmitry
В целом недо понять, в каком поле формы эти данные находятся и почему пустые вместо числа.
Ruslan
Ruslan
Igor
Ruslan
Igor
У вас колонка int а вы туда empty string передаете
Dmitry
Dmitry
Пытаемся понять, почему туда пусто прилетает
Dmitry
Судя по коду из контроллера, пусто там точно не должно быть
Dmitry
По этому полю потом апдейт происходит
Dmitry
Igor
Надо сам post посмотреть для начала
Dmitry
Dmitry
Dmitry
В модели save вообще нет
Igor
Вот контроллер
Причем тут он. Начните с того что в ообще уходит в пост. Прямо в браузере во вкладке сеть
Dmitry
Igor
Dmitry
Dmitry
Где это
Dmitry
Я лично никогда не пользовался, а видимо зря ))
Igor
Igor
Igor
Ruslan
Вот похоже последний post запрос с непрерывними логами, не совсем понимаю где и что посмотреть тут
Ruslan
Ruslan
Кстати, а что означает 303 код от сервера, не видел его как то ранее.
Ruslan
Igor
это может быть в вью?
Смотрите. Дебажиться это все так.
1. Смотрим что отправляеться (в бразуре)
2. Смотрим что приходи в CАМОЙ ПЕРВОЙ входа контролера.
3. Смотрим что имеем в данных перед save.
Если в пункте 1 данные правильные, то это проблема бекенд. , если нет то это фронт.
Если в п1 все верно а в п2 нет, то где очитка инпута.
Если в п1 и п2 данные нормальные, то начинаем искать где и как менются данные в между пунктами 2 и 3
Дмитрий
303 See Other — документ по запрошенному URI нужно запросить по адресу в поле Location заголовка с использованием метода GET несмотря даже на то, что первый запрашивался иным методом. Этот код был введён вместе с кодом 307 для избежания неоднозначности, чтобы сервер был уверен, что следующий ресурс будет запрошен методом GET. Например, на веб-странице есть поле ввода текста для быстрого перехода и поиска. После ввода данных браузер делает запрос методом POST, включая в тело сообщения введённый текст. Если обнаружен документ с введённым названием, то сервер отвечает кодом 303, указав в заголовке Location его постоянный адрес. Тогда браузер гарантировано его запросит методом GET для получения содержимого. В противном случае сервер просто вернёт клиенту страницу с результатами поиска. Введено в HTTP/1.1.
Дмитрий
ну их много, 3xx это редиректы
Дмитрий
разного значения
Dmitry
Dmitry
Xdebug в помощь 🤷♂
Dmitry
Dmitry
Но лучше с ним, брейкпоинтов понатыкал и играйся
hary
$taglast = implode(',', $params->get('taglast', array()));
echo $taglast ;
$tagscount = 1;
$sortdirection = $params->get('sortdirection', 'desc');
switch ($params->get('sorttypel', 0)) {
case 0: $sortfieldl = 'm.id';
break;
case 1: $sortfieldl = 'm.title';
break;
case 2: $sortfieldl = 'm.lft';
break;
case 3: $sortfieldl = 'm.created_time';
}
$querylastag = $db->getQuery(true)
->select(
array(
$db->quoteName('m.id'),
$db->quoteName('m.parent_id'),
$db->quoteName('m.title'),
////$db->quoteName('m.path'),
//$db->quoteName('m.alias'),
//$db->quoteName('m.lft'),
$db->quoteName('m.published'),
$db->quoteName('m.created_time'),
)
);
$querylastag->from($db->quoteName('#__tags', 'm'));
$querylastag->where($db->quoteName('m.parent_id') . ' = (' . $taglast . ')');
$querylastag->where($db->quoteName('m.published') . ' = 1');
$querylastag->order($db->quoteName('m.created_time').' '. $sortdirection); //ivenc
//$query->limit($db->quoteName().'LIMIT 0,'.($tagscount);
$db->setQuery($querylastag,0,$tagscount);
$db->setQuery($querylastag);
//echo $sortfieldl;
echo $querylastag;
$results2 = $db->loadObjectList();
print_r ($results2);
return $results->id;
echo $results2->id;