我有一个(当前正在运行的)插件,当用户注册时,它会在第三方系统上创建用户。到目前为止这个工作正常。
我现在正在尝试向用户添加一个param以存储第三方ID,但这似乎不起作用:
function onUserAfterSave($user,$isNew,$success,$msg=''){
if(!$isNew || ! $success){
return;
}
jimport('joomla.log.log');
$res = someThirdPartyCall();
//Res is valid here
JLog::add("Res ".print_r($res,true), JLog::WARNING, 'jerror');
$userOb = JUser::getInstance($user['id']);
$userOb->setParam('sugarid', $res['id']);
//User ob is valid here
JLog::add("UserOb ".print_r($userOb,true), JLog::WARNING, 'jerror');
$saveRes = $userOb->save();
//Result is true. Error array is empty.
JLog::add("Result ".print_r($saveRes,true), JLog::WARNING, 'jerror');
JLog::add("Errors ".print_r($userOb->getErrors(),true), JLog::WARNING, 'jerror');
}
一切看起来都很棒,没有错误等。唯一不起作用的是没有在数据库中设置参数。这是因为我试图将用户保存在onUserAfterSave
?
答案 0 :(得分:0)
您忘记将导入用户库添加到您的插件中以使用setParam
。所以在文件的开头不要忘记包含用户库。使用这行代码。
jimport( 'joomla.user.user' );
希望这会有所帮助。
答案 1 :(得分:0)
如果保存完成,则无法返回并添加,保存已完成并且门已关闭。您需要在设置参数时进行设置,方法是创建一个表单插件以向params添加另一个字段。然后你根本不需要保存,因为params只会保存为正常过程的一部分。我假设这不是需要加密的东西,对吧?这只是用户名吗?
另外我应该提一下,有Juser :: defParam($ key,$ value)可以让你通过代码添加参数。