2013-09-06 3 views
2

Привет для моего настраиваемого компонента Мне нужно установить некоторые пользовательские параметры для пользователя joomla для членства для проверки, нет ли периода тестирования пользователя или нет, и его можно изменить с панели администратора компонента для конкретный пользователь.joomla - Сохранение пользовательских параметров в задаче для настраиваемых компонентов

Проблема возникает при извлечении параметра. Я думаю, что он хранится в cookie, и он не обновляется. Я написал код, чтобы проверить его.

$user = JFactory::getUser(JRequest::getVar('id','0')); 
echo $user->getParam('trialPeriod','0'); 

, чтобы сохранить значение. Я использую JHTML booleanlist.

$user->setParam('trialPeriod',$data['trialPeriod']); 
$user->save(); 

затем сохраняет значение в таблице пользователей Вебсайтов в строке этого пользователя с колонком Params как;

{"trialPeriod":"0"} 

в этой ситуации повторяет значение как 0. Тогда я Changin состояние trialPeriod вар как 1 и хранение в БД он обновляет БД, как;

{"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'); 
} 

Фактически значительная часть кода не является необходимой для объяснения, но вы получите эту идею.

Какое решение для этого?

Edited.

$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; 
    } 

Этот фрагмент кода предназначен для хранения данных, выпущенных с помощью таблицы пользователей.

+0

Я тестировал это и, похоже, работает нормально. Вы пытаетесь сохранить это для действительного пользователя (т. Е. 'JRequest :: getVar ('id', '0')' возвращает допустимый идентификатор пользователя - '0' обычно _not_ действительный id)? Может быть ошибка хранения данных, если пользователь недействителен. Вы можете попытаться получить такое представление, выполнив «echo» id: .JRequest :: getVar ('id', '0'). ' и ошибка:.$ user-> getError(); ' – MasterAM

+0

Прошу прощения, я сделал некоторую ошибку, приведенный выше код Jrequest для страницы администратора, и он принимает правильное значение, так как после перенаправления переключатели переключают состояние переключателя и видят состояние в интерфейсе I Я получаю JUser без какого-либо идентификатора, чтобы получить текущего пользователя. Затем я проверяю, зарегистрирован ли он или нет, как $ user-> guest == 0, если это правда, это написано на странице, но старое значение. – freezer

+0

, пожалуйста, покажите часть, в которой хранятся данные, независимо от того, работает она или нет. Вы должны сделать это как можно проще, чтобы люди могли помочь вам решить вашу проблему. Пожалуйста, сделайте это, отредактировав исходный вопрос. – MasterAM

ответ

1

Оказывается, это факт, что Joomla хранит экземпляр JUser в сеансе, который вызвал проблему.

При изменении параметров пользователя в фоновом режиме изменения не отражаются в сеансе пользователя до тех пор, пока она не войдет в систему и не войдет снова.

Мы не смогли найти легкий вариант для изменения активного сеанса пыльников пользователя, поэтому мы прибегли к использованию плагина, который обновляет экземпляр JUser в вошедшем в сессии пользователей, что-то вроде следующий:

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

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

(ссылка: here).

Смежные вопросы