2011-12-08 36 views
1

我創建了一個Joomla 1.7插件來爲用戶配置文件添加一些自定義字段。作爲一個基礎,我開始使用Joomla中包含的配置文件插件作爲示例。如何將複選框存儲在Joomla配置文件插件中?

我添加了一個複選框字段象下面這樣:

<?xml version="1.0" encoding="utf-8"?> 
<form> 
    <fields name="profile"> 
     <fieldset name="profile" label="PLG_USER_WISPROFILE_SLIDER_LABEL"> 
      <field name="speltak1" type="checkboxes" label="PLG_USER_WISPROFILE_SPELTAK_LABEL" 
       description="PLG_USER_WISPROFILE_SPELTAK_DESC"> 
       <option value="Bevers">PLG_USER_WISPROFILE_OPTION_BEVERS</option> 
       <option value="Welpen Ochtend Horde">PLG_USER_WISPROFILE_OPTION_WELPENOCHTEND 
       </option> 
       <option value="Welpen Middag Horde">PLG_USER_WISPROFILE_OPTION_WELPENMIDDAG 
       </option> 
       <option value="Scouts Verkenners">PLG_USER_WISPROFILE_OPTION_SCOUTSVERKENNERS 
       </option> 
       <option value="Scouts Verkensters">PLG_USER_WISPROFILE_OPTION_SCOUTSVERKENSTERS 
       </option> 
       <option value="Explorers">PLG_USER_WISPROFILE_OPTION_EXPLORERS</option> 
       <option value="Klimstam">PLG_USER_WISPROFILE_OPTION_KLIMSTAM</option> 
      </field> 
     </fieldset> 
    </fields> 
</form> 

這將正確地註冊期間將字段添加到表格和編輯的用戶簡檔。但是當我嘗試保存配置文件時,沒有任何內容存儲在數據庫中。複選框字段將轉換爲$ data變量中的數組。但示例代碼無法將其保存到數據庫。有人知道怎麼做這個嗎?

回答

1

看起來您正在截取表單創建並將您的字段添加到表單。

您沒有提及任何代碼/功能,您正在運行捕捉窗體時,它被保存。也許你期待Joomla神奇地捕捉你的新的現場數據並保存它?如果是這樣,那麼不幸的是,它不會那樣工作。你需要做一些額外的工作。

看從文檔此頁,並注意「功能onUserAfterSave」部分。 http://docs.joomla.org/Creating_a_profile_plugin

1

它沒有保存的原因是因爲你正在將一個數組元素傳遞給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; 
} 

此時您需要創建一種方法來獲取信息。我知道這個帖子已經過時了,但我只是想爲任何可能遇到這個問題的新成員發佈一個理由。

相關問題