Database joomla-在自定义组件问题中存储用户参数

Database joomla-在自定义组件问题中存储用户参数,database,joomla,parameters,components,Database,Joomla,Parameters,Components,您好,对于我的自定义组件,我需要为joomla用户设置一些自定义参数,以便检查用户是否处于试用期,并且可以从组件管理面板为特定用户更改 检索参数时出现问题。我认为它存储在cookie中,没有更新。我写了这样的代码来检查它 $user = JFactory::getUser(JRequest::getVar('id','0')); echo $user->getParam('trialPeriod','0'); 为了保存这个值,我使用了JHTML booleanlist $user->

您好,对于我的自定义组件,我需要为joomla用户设置一些自定义参数,以便检查用户是否处于试用期,并且可以从组件管理面板为特定用户更改

检索参数时出现问题。我认为它存储在cookie中,没有更新。我写了这样的代码来检查它

$user = JFactory::getUser(JRequest::getVar('id','0'));
echo $user->getParam('trialPeriod','0');
为了保存这个值,我使用了JHTML booleanlist

$user->setParam('trialPeriod',$data['trialPeriod']);
$user->save();
然后is将joomla users表中的值存储在该用户的行中,参数列为

{"trialPeriod":"0"}
在这种情况下,它将值作为0进行回显。然后,我在trialPeriod var为1的状态下,将其存储在db中,并将db更新为

{"trialPeriod":"1"}
毕竟,我正在刷新页面,其中的值是提示,屏幕上的值仍然与0相同

澄清

首先,在正确更改参数后,保存参数没有问题。问题是检索已更改的。相关代码如下所示

$user = JFactory::getUser();
$doc = JFactory::getDocument();

if($user->getParam('trialPeriod',0) == 0){
    $ed = JFactory::getDate($obj->expirationDate);//obj is user from custom table and there is no problem with getting it.
    $isTrialEnd = FALSE;
}else{
    $ed = JFactory::getDate($user->getParam('trialExp',0));
    $isTrialEnd = TRUE;
}
if($isTrialEnd){
    //do something else
}else{
    echo $user->getParam('trialPeriod','0');
}
实际上,大部分代码都不需要解释,但你会明白的

解决这个问题的办法是什么

编辑

$app = JFactory::getApplication();

    $config = JFactory::getConfig();
    $db     = $this->getDbo();

    $isNew = empty($data['uid']) ? true : false;
    $params = JComponentHelper::getParams('com_dratransport');
    if($isNew){

        // Initialise the table with JUser.
        $user   = new JUser;

        // Prepare the data for the user object.
        $username = self::getCreatedUserName($data['type']);
        $data['username']   = !empty($data['username']) ? $data['username'] : $username;
        $data['password']   = $data['password1'];

        $useractivation = $params->get('useractivation');

        // Check if the user needs to activate their account.
        if (($useractivation == 1) || ($useractivation == 2)) {
            $data['activation'] = JApplication::getHash(JUserHelper::genRandomPassword());
            $data['block'] = 1;
        }

    }else{          

        $user   = JFactory::getUser($data['uid']);
        $data['password']   = $data['password1'];

    }

    $membership = DraTransportHelperArrays::membershipCFG();
    $membership = $membership[$data['membership']];

    if($data['membership'] == 4)
        $data['groups']     = array($params->get('new_usertype',2),$params->get($membership,2));
    else
        $data['groups']     = array($params->get($membership,2));



    $data['name']       = $data['companyName'];
    $user->setParam('trialPeriod',$data['trialPeriod']);

    // Bind the data.
    if (!$user->bind($data)) {
        $this->setError(JText::sprintf('COM_USERS_REGISTRATION_BIND_FAILED', $user->getError()));
        return false;
    }

    // Load the users plugin group.
    JPluginHelper::importPlugin('user');

    // Store the data.
    if (!$user->save()) {
        $app->enqueuemessage($user->getError());
        $this->setError(JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $user->getError()));
        return false;
    }

这段代码用于存储与users表相关的数据。

结果是Joomla在会话中存储了导致问题的
JUser
实例

从后端更改用户参数时,更改不会反映在该用户的会话中,直到该用户注销并再次登录

我们无法找到一个简单的选项来修改另一个用户的活动会话,因此我们求助于使用一个插件来刷新登录用户会话中的JUser实例,如下所示:

$user = JFactory::getUser();
$session = JFactory::getSession();

if(!$user->guest) {
    $session->set('user', new JUser($user->id));
}

(参考:)。

我已经测试过了,它似乎工作正常。您是否试图为有效用户存储此信息(即,
JRequest::getVar('id','0')
返回有效的用户id-
0
通常不是有效的id)?如果用户无效,则存储数据时可能会出错。您可以通过执行
echo'id is'.JRequest::getVar('id','0')来尝试获得一些见解,错误为:'.$user->getError()很抱歉,我犯了一些错误,上面的代码Jrequest用于管理页面,它采用了正确的值,因为在重定向后,单选按钮检查状态正在更改,要查看前端的状态,我将获取没有任何id的JUser以获取当前用户。然后我会检查它是否以$user->guest==0的身份登录,如果是真的,则会在页面上写入,但为旧值。请显示存储数据的部分,无论它是否正常工作。你应该尽可能让人们帮助你解决问题。请编辑您的原始问题。谢谢您的关注:)如果我是您,我会将我的Joomla安装调试模式设置为
上的,以便查看所有查询,并使用我最喜欢的调试器逐步调试代码,查看加载的内容、跳过的内容以及原因。