Причина, по которой он не сохраняется, заключается в том, что вы передаете элемент массива в запрос sql.Вам нужно изменить форму этого.Либо путем сериализации данных или превращения их в JSON или что-то.На этом этапе он будет сохранен в базе данных.
function onUserAfterSave($data, $isNew, $result, $error){
$userId = JArrayHelper::getValue($data, 'id', 0, 'int');
if ($userId && $result && isset($data['gw2atpprofile']) && (count($data['gw2atpprofile']))){
try {
$db = &JFactory::getDbo();
$db->setQuery('DELETE FROM #__user_profiles WHERE user_id = '.$userId.' AND profile_key LIKE \'gw2atpprofile.%\'');
if (!$db->query()) {
throw new Exception($db->getErrorMsg());
}
$tuples = array();
$order = 1;
foreach ($data['gw2atpprofile'] as $k => $v) {
if (is_array($v)){
$v = serialize($v);
}
$tuples[] = '('.$userId.', '.$db->quote('gw2atpprofile.'.$k).', '.$db->quote($v).', '.$order++.')';
}
$db->setQuery('INSERT INTO #__user_profiles VALUES '.implode(', ', $tuples));
if (!$db->query()) {
throw new Exception($db->getErrorMsg());
}
} catch (JException $e) {
$this->_subject->setError($e->getMessage());
return false;
}
}
return true;
}
На этом этапе вам нужно будет создать способ вывода информации.Я знаю, что эта ветка старая, но я просто хотел опубликовать причину для новых участников, которые могут наткнуться на этот вопрос.