2011-05-04 130 views
0

我對Joomla非常陌生,1.6也很新,看起來好像很麻煩,因爲我在模塊後端將數據保存到模塊params字段時遇到了一些麻煩。使用ajax保存模塊參數的模塊開發問題

讓我更好地解釋一下。

我有一個小的聯繫人管理器,我希望人們使用Joomla 1.6中的joomla模塊進行訂閱。現在模塊已經創建好了,一切正常。我甚至在模塊後端創建了一個自定義字段來調用我的API並使用所需數據填充下拉框。

我希望能夠將選擇保存爲模塊參數,以便在我的模板中輕鬆訪問它。這似乎很難做到,因爲我無法找到任何文檔。

基本上我的過程如下。

  1. 我去Joomla的模塊管理器 admin。
  2. 我選擇我已安裝的模塊,並打開 。
  3. 該代碼運行時會填充 下拉框,其中聯繫人可以訂閱的數量爲 。
  4. 起腳 - 我希望能夠 選擇列表名稱,並平變化保存ID 到模塊PARAMS字段中 的Joomla DB與阿賈克斯 請求 -

我得到的onchange事件工作,甚至運行與發佈請求的腳本,但在我用來處理帖子和保存數據我不能讓數據庫實例做任何操作的PHP文件。那說明,下面的代碼:在模塊後端

自定義字段

defined('_JEXEC') or die('Direct Access to this location is not allowed.'); 
jimport('joomla.html.html'); 
//import the necessary class definition for formfield 
jimport('joomla.form.formfield'); 

// Include API utility file 
require_once(dirname(__FILE__) . '/../lib/pmailer_subscription_api.php'); 

/** 
* Defines the JFormFieldLists class for the pMailer subscription module for 
* Joomla CMS version 1.6 to get the lists provided the API key. 
* 
* @category Joomla 
* @package Modules 
* @copyright 2011 Prefix Technologies Pty (Ltd) (http://www.prefix.co.za/) 
* @link  http://www.pmailer.co.za/ 
*/ 

class JFormFieldLists extends JFormField 
{ 
    /** 
    * The form field type. 
    * 
    * @var string 
    * @since 1.6 
    */ 
    protected $type = 'lists'; //the form field type 

    /** 
    * Method to retrieve the lists that resides in your pMailer account using 
    * the API. 
    * 
    * @return array The field option objects. 
    * @since 1.6 
    */ 
    protected function getInput() 
    { 
     $document = JFactory::getDocument(); 
     $document->addScript(
      JURI::base() . '../modules/mod_pmailer_subscription/lib/' 
      . 'mod_pmailer_subscription.js' 
     ); 

     $options = array(); 
     $attr = ''; 

     /* 
     * Initialize JavaScript field attributes. This is the path to the 
     * ajax handler that will save your list selection. 
     */ 
     $attr .= $this->element['onchange'] = (string) 
      'onchange="javascript: saveListSelection(\'' 
       . JURI::base() 
       . '../modules/mod_pmailer_subscription/lib/utils.php' 
      . '\')"'; 

     // Get the database instance 
     $db = JFactory::getDbo(); 
     // Build the select query 
     $query = 'SELECT params FROM jos_modules' 
      . ' WHERE module="mod_pmailer_subscription"'; 
     $db->setQuery($query); 
     $params = $db->loadObjectList(); 

     // Decode the options to get thje api key and url 
     $options = json_decode($params[0]->params, true); 

     // Create a new API utility class 
     $api = new PMailerSubscriptionApiV1_0(
      $options['enterprise_url'], 
      $options['pmailer_api_key'] 
     ); 

     // Get the lists needed for subscription 
     $response = $api->getLists(); 

     // Make a default entry for the dropdown 
     $lists = array('0' => 'Please select a list'); 

     // Builds the options for the dropdown 
     foreach ($response['data'] as $list) 
     { 
      $lists[$list['list_id']] = $list['list_name']; 

     } 

     // The dropdown output 
     return JHTML::_(
      'select.genericlist', 
      $lists, 
      'mod_pmailer_lists_box', 
      trim($attr), 
      'id', 
      'title', 
      $this->value 
     ); 

    } 

} 

,節約帕拉姆

JavaScript的

的實用程序文件
// Gets called on dropdown change event 
function saveListSelection(url) 
{ 
    // Ajax code here to save list selection 
    var x = new Request({ 
     url: url, 
     method: 'post' 
    }).send('op=saveList&id=' + $('mod_pmailer_lists_box').get('value')); 

} 

我希望你能給我一些建議,告訴我如何做到這一點,我就像瘋了似的卡住。唯一的限制是它必須是一個模塊。老闆的命令。

+0

哈哈沒有人喜歡Joomla了,我可以聯繫;) – 2011-05-04 12:14:41

回答

0

看起來沒有人涉及這個問題。

我發現了一種通過不使用ajax來修復它的方法。